Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
### Ifitwala Doc
# Ifitwala Website and Documentation

Site and Docs for IFitwala Ed
Company website, product showcase, and documentation hub for Ifitwala.

Ifitwala helps organizations grow better systems. We support ERP implementation, workflow improvement, and data governance for organizations that depend on accurate, sensitive, and operationally critical data.

Our deepest expertise is in education: schools, education groups, LMS ecosystems, admissions, student records, reporting, safeguarding workflows, and privacy-aware data operations. Ifitwala Ed is our flagship education ERP, built from direct international-school experience.

### Installation

Expand Down
6 changes: 3 additions & 3 deletions ifitwala_doc/api/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,9 @@ def run_yarn(args):
run_yarn("--version")
_run("node --version", cwd=proj_root, env=env)

# 2) Build via package.json script (runs 'astro build' and other steps)
# 2) Build via package.json script (runs marketing assets and Astro pages)
try:
run_yarn("build:docs")
run_yarn("build")
except Exception as build_error:
error_text = str(build_error).lower()
# Astro can fail when stale compile artifacts are present in dist/.astro.
Expand All @@ -272,7 +272,7 @@ def run_yarn(args):
cwd="/",
env=env,
)
run_yarn("build:docs")
run_yarn("build")

# 3) Deploy built assets
dist_root = os.path.join(proj_root, "dist")
Expand Down
12 changes: 12 additions & 0 deletions ifitwala_doc/api/site.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,17 @@ class PagePayload(TypedDict, total=False):
}

BOOK_A_DEMO_PATH = "/book-a-demo/"
BOOK_A_CALL_PATH = "/book-a-call/"
DEMO_LABEL_HINTS = {
"demo",
"book a demo",
"see a live demo",
}
CALL_LABEL_HINTS = {
"book a call",
"discuss your systems",
"talk to us",
}


# -----------------------
Expand All @@ -71,6 +77,8 @@ def _normalize_demo_href(label: Any, href: Any) -> str:
href_value = (href or "").strip()

if not href_value:
if label_value in CALL_LABEL_HINTS:
return BOOK_A_CALL_PATH
if label_value in DEMO_LABEL_HINTS:
return BOOK_A_DEMO_PATH
return href_value
Expand All @@ -81,8 +89,12 @@ def _normalize_demo_href(label: Any, href: Any) -> str:
except Exception:
parsed_path = href_value.strip().rstrip("/")

if label_value in CALL_LABEL_HINTS:
return BOOK_A_CALL_PATH
if label_value in DEMO_LABEL_HINTS:
return BOOK_A_DEMO_PATH
if parsed_path in {"/call", "/book-call", "/book-a-call", "/contact"}:
return BOOK_A_CALL_PATH
if parsed_path in {"/demo", "/book-demo", "/book-a-demo"}:
return BOOK_A_DEMO_PATH

Expand Down
19 changes: 18 additions & 1 deletion ifitwala_doc/crm/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,33 @@
import frappe

@frappe.whitelist(allow_guest=True)
def capture_lead(first_name, email, last_name=None, phone=None, school_name=None, job_title=None, source="Website", notes=None):
def capture_lead(
first_name,
email,
last_name=None,
phone=None,
organization=None,
organization_type=None,
school_name=None,
job_title=None,
interest_area=None,
current_system=None,
source="Website",
notes=None,
):
lead = frappe.get_doc({
"doctype": "Lead",
"first_name": first_name,
"last_name": last_name,
"email_id": email, # Standard field is email_id usually in Core, but since I created Custom Lead, use 'email'
"email": email, # I defined 'email' in my JSON
"phone": phone,
"organization": organization,
"organization_type": organization_type,
"school_name": school_name,
"job_title": job_title,
"interest_area": interest_area,
"current_system": current_system,
"source": source,
"notes": notes,
"status": "New"
Expand Down
28 changes: 27 additions & 1 deletion ifitwala_doc/crm/doctype/lead/lead.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@
"email",
"phone",
"column_break_organization",
"organization",
"organization_type",
"school_name",
"job_title",
"interest_area",
"current_system",
"section_status",
"status",
"source",
Expand Down Expand Up @@ -54,6 +58,17 @@
"fieldname": "column_break_organization",
"fieldtype": "Column Break"
},
{
"fieldname": "organization",
"fieldtype": "Data",
"label": "Organization"
},
{
"fieldname": "organization_type",
"fieldtype": "Select",
"label": "Organization Type",
"options": "\nCompany\nSchool\nEducation group\nTraining organization\nNGO\nOther"
},
{
"fieldname": "school_name",
"fieldtype": "Data",
Expand All @@ -64,6 +79,17 @@
"fieldtype": "Data",
"label": "Job Title"
},
{
"fieldname": "interest_area",
"fieldtype": "Select",
"label": "Interest Area",
"options": "\nERP implementation\nIfitwala Ed\nData governance / privacy\nEducation systems\nNot sure yet"
},
{
"fieldname": "current_system",
"fieldtype": "Data",
"label": "Current System"
},
{
"fieldname": "section_status",
"fieldtype": "Section Break",
Expand All @@ -80,7 +106,7 @@
"fieldname": "source",
"fieldtype": "Select",
"label": "Source",
"options": "Website\nReferral\nLinkedIn\nInstagram\nEvent\nOutbound",
"options": "Website\nWebsite - Book a Call\nWebsite - Ifitwala Ed Demo\nReferral\nLinkedIn\nInstagram\nEvent\nOutbound",
"default": "Website"
},
{
Expand Down
4 changes: 2 additions & 2 deletions ifitwala_doc/hooks.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
app_name = "ifitwala_doc"
app_title = "Ifitwala Doc"
app_title = "Ifitwala Website"
app_publisher = "François de Ryckel"
app_description = "Site and Docs for IFitwala Ed"
app_description = "Company website, product showcase, and documentation hub for Ifitwala"
app_email = "f.deryckel@gmail.com"
app_license = "mit"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,12 +108,20 @@ def test_get_nav_returns_enabled_menu_items_in_order(self):
"item_order": 20,
"target_blank": 1,
},
{
"doctype": "Navigation Menu Item",
"label": "Book a Call",
"href": "/contact",
"item_order": 30,
"target_blank": 0,
},
],
}
).insert()

items = site_api.get_nav("Header")
self.assertEqual([item["label"] for item in items], ["Docs", "Book a Demo"])
self.assertEqual([item["label"] for item in items], ["Docs", "Book a Demo", "Book a Call"])
self.assertEqual(items[0]["href"], "/docs")
self.assertEqual(items[1]["href"], "/book-a-demo/")
self.assertEqual(items[1]["target_blank"], 1)
self.assertEqual(items[2]["href"], "/book-a-call/")
2 changes: 1 addition & 1 deletion ifitwala_doc/src/components/Hero.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import { Button } from 'frappe-ui';

const props = defineProps({
title: { type: String, default: 'A campus where curiosity blooms.' },
title: { type: String, default: 'Systems that help organizations grow.' },
subtitle: { type: String, default: '' },
actions: {
type: Array,
Expand Down
4 changes: 2 additions & 2 deletions ifitwala_doc/www/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ifitwala Ed — Loading</title>
<title>Ifitwala - Loading</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="robots" content="noindex" />
<style>
Expand Down Expand Up @@ -154,7 +154,7 @@
<body>
<div class="loader">
<div class="spinner" aria-hidden="true"></div>
<strong>Preparing the Ifitwala site…</strong>
<strong>Preparing the Ifitwala site...</strong>
<span id="fallback-message" hidden>
If the page does not load automatically, please refresh or visit
<a href="/assets/ifitwala_doc/index.html">/assets/ifitwala_doc/index.html</a>.
Expand Down
4 changes: 2 additions & 2 deletions install_ifitwala_nginx.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ location ^~ /features/ {
try_files \$uri \$uri/ =404;
}

# ---- New root-level marketing pages (book-a-demo, pricing, etc.) ----
location ~ ^/(book-a-demo|pricing|about) {
# ---- Root-level marketing pages ----
location ~ ^/(book-a-call|book-a-demo|pricing|about|services|data-governance|education|ifitwala-ed)(/|$) {
root ${ASSETS_ROOT};
try_files \$uri \$uri/index.html \$uri/ =404;
}
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "ifitwala_doc"
authors = [
{ name = "François de Ryckel", email = "f.deryckel@gmail.com"}
]
description = "Site and Docs for IFitwala Ed"
description = "Company website, product showcase, and documentation hub for Ifitwala"
requires-python = ">=3.14,<3.15"
readme = "README.md"
dynamic = ["version"]
Expand Down
Loading
Loading