{"id":50051547,"url":"https://github.com/fderyckel/ifitwala_ed","last_synced_at":"2026-06-07T00:01:20.255Z","repository":{"id":358772347,"uuid":"1239385598","full_name":"fderyckel/ifitwala_ed","owner":"fderyckel","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-28T10:59:59.000Z","size":8541,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T12:03:01.086Z","etag":null,"topics":["account-management","activities","admission","attendance-management-system","cms","crm","education","enrollment","erp","governance-operations","gradebook-managament","health","hrms","lesson","lms","portal","scheduling","sis","student-management"],"latest_commit_sha":null,"homepage":"http://ifitwala.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fderyckel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-15T03:31:13.000Z","updated_at":"2026-05-25T14:50:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fderyckel/ifitwala_ed","commit_stats":null,"previous_names":["fderyckel/ifitwala_ed"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fderyckel/ifitwala_ed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fderyckel%2Fifitwala_ed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fderyckel%2Fifitwala_ed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fderyckel%2Fifitwala_ed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fderyckel%2Fifitwala_ed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fderyckel","download_url":"https://codeload.github.com/fderyckel/ifitwala_ed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fderyckel%2Fifitwala_ed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34003814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["account-management","activities","admission","attendance-management-system","cms","crm","education","enrollment","erp","governance-operations","gradebook-managament","health","hrms","lesson","lms","portal","scheduling","sis","student-management"],"created_at":"2026-05-21T10:00:23.031Z","updated_at":"2026-06-07T00:01:20.249Z","avatar_url":"https://github.com/fderyckel.png","language":"Python","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"# 🌱 Ifitwala Ed\n\n## A Unified Institutional Operating System for Education\n\n**Ifitwala_Ed** is an open-source **Institutional Operating System** that replaces fragmented SaaS tools with **one coherent data model, one permission system, and one analytics surface**.\n\nBuilt on the enterprise-grade **Frappe Framework**, it is designed for schools, colleges, and universities that value **data sovereignty, architectural integrity, long-term scalability, and true integration between all the stakeholders and various domains of your educational institution .**\n\n---\n\n## 🚀 The Paradigm Shift\n\nMost educational institutions operate on a \"Frankenstein stack\": an SIS for enrollment, an LMS for grading, a distinct admission module, a separate timetable tool, a HR module that is not connected to education, an accounting software unrelated to the needs of an education institution, a Tableau dashboard for analytics, and endless spreadsheets to bridge the gaps.\n\n**The result?** Data is duplicated, permissions drift, analytics require manual reconciliation, and staff spent time moving information instead of acting on it.\n\n**Ifitwala_Ed eliminates fragmentation at the root.**\nWe do not build \"integrations\" between disconnected modules. We build **one backbone** where every module — Academic, Operation, Analytics, Admission, HR, Marketing \u0026 Communication, and Financial — references the same single source of truth.\n\n**Ifitwala is an Education ERP - Education Resource Platform.**\nYes Education institution are not and should not be compared and considered as \"Entreprise\".  The model, fundamentally human at its core, is different and Ifitwala Ed is build around capturing that difference in both its UI-UX design and architecture.\n\n---\n\n## 🏛️ Architecture: The Nested Set Hierarchy\n\nEducation is hierarchical by nature. Ifitwala Ed reflect this structure at its core.\n\nIfitwala_Ed uses a **Nested Set Hierarchy** to model the reality of your institution. This is a lot more than just a labeling system; it is the logic engine that drives permissions, reporting, and policy inheritance throughout the whole system.\n\nThis allows a true multi-campuses and multi-schools platform with each entities having its own models, management organization, data structure, workflows.\n\n### Visualizing the Nested Reality\n\n```mermaid\ngraph TD\n    %% Nodes Definition\n    ORG[🏢 Parent Organization]\n\n    %% Level 1: Sub-Organizations\n    SO1[🏫 Sub-Org 1: Standalone Primary]\n    SO2[🎓 Sub-Org 2: Complex Schools Group]\n    SO3[⚽ Sub-Org 3: Shared Facilities \u0026 Athletics]\n\n    %% Level 2: Schools and Major Entities (Children of L1)\n    SO1_PRI[🎒 Primary School]\n\n    SO2_SEC[🏫 Secondary School]\n    SO2_PRI[🏫 Primary School]\n    SO2_LC[🧠 Learning Center]\n\n    SO3_PLAY[🛝 Playground Complex]\n    SO3_GOLF[⛳ Golf Center]\n    SO3_GYM[🏟️ Athletic Center]\n\n    %% Level 3: Sub-Divisions (Children of L2)\n    SO2_HS[📜 High School]\n    SO2_MS[📘 Middle School]\n\n    SO2_UP[⬆️ Upper Primary]\n    SO2_LP[⬇️ Lower Primary]\n    SO2_KG[🧸 Kindergarten]\n\n    SO2_TC[📝 Testing Center]\n\n    %% Relationships Structure\n    ORG --\u003e SO1 \u0026 SO2 \u0026 SO3\n\n    SO1 --\u003e SO1_PRI\n\n    SO2 --\u003e SO2_SEC \u0026 SO2_PRI \u0026 SO2_LC\n    SO2_SEC --\u003e SO2_HS \u0026 SO2_MS\n    SO2_PRI --\u003e SO2_UP \u0026 SO2_LP \u0026 SO2_KG\n    SO2_LC --\u003e SO2_TC\n\n    SO3 --\u003e SO3_PLAY \u0026 SO3_GOLF \u0026 SO3_GYM\n\n    %% Elegant Styling Definition\n    classDef rootNode fill:#2E3B55,stroke:#1B263B,stroke-width:2px,color:#fff,rx:5px,ry:5px;\n    classDef lvl1Node fill:#4A90E2,stroke:#357ABD,stroke-width:2px,color:#fff,rx:5px,ry:5px;\n    classDef lvl2Node fill:#50C878,stroke:#3DAF65,stroke-width:1px,color:#fff,rx:5px,ry:5px;\n    classDef lvl3Node fill:#A8E6CF,stroke:#8FD4BD,stroke-width:1px,color:#2E3B55,rx:5px,ry:5px;\n    classDef facilityNode fill:#F7C548,stroke:#E1B137,stroke-width:1px,color:#2E3B55,rx:5px,ry:5px;\n\n    %% Apply Styles\n    class ORG rootNode;\n    class SO1,SO2,SO3 lvl1Node;\n    class SO1_PRI,SO2_SEC,SO2_PRI,SO2_LC lvl2Node;\n    class SO2_HS,SO2_MS,SO2_UP,SO2_LP,SO2_KG,SO2_TC lvl3Node;\n    class SO3_PLAY,SO3_GOLF,SO3_GYM facilityNode;\n```\n\n**Why this matters:**\n\n**Why this matters:**\n\n1. **Hierarchical Permissions, Instantly**\n   Access flows down the tree. A user with rights to a parent node automatically sees all descendants—whether it's an `Organization` spanning multiple campuses, a `School` with grade-level subdivisions, or a `Department` with sub-teams. Sibling branches remain strictly isolated. This isn't filtering; it's architectural multi-tenancy.\n\n2. **Intelligent Inheritance**\n   Policies, assessment categories, and configurations cascade naturally. Set a policy at the `Organization` level and it governs all schools beneath it. Configure assessment categories on a parent `Program` (e.g., \"High School\") and child programs inherit them—until you override locally. Nearest-ancestor resolution means the system finds the right configuration without manual duplication.\n\n3. **Cross-Boundary Resource Sharing**\n   `Location` hierarchies (Campus → Building → Floor → Room) support explicit sharing rules. A theater or athletic facility can be shared with descendant schools while maintaining tenant isolation. Room utilization analytics aggregate across the location tree—see occupancy at the building level or drill down to individual rooms.\n\n4. **Delegated Authority \u0026 Approvals**\n   The `Employee` reporting hierarchy (`reports_to`) powers delegated workflows and the org chart. `Team` hierarchies enable recurring meetings that automatically include all members of a team and its sub-teams. Department trees mirror your organizational structure for approvals and escalations.\n\n5. **Roll-Up Analytics Without Reconciliation**\n   Dashboards aggregate naturally up the tree. A Principal sees school-wide enrollment trends; a Superintendent sees cross-campus insights. Attendance reports, enrollment analytics, and room utilization all respect the hierarchy—select a parent school, and data from all descendants roll up automatically. No manual spreadsheet consolidation.\n\n6. **From Single School to Global Federation**\n   The same architecture serves a single K-12 institution or a multi-national school group with dozens of campuses. Add nodes to the tree; the system scales without re-architecture. Organization trees handle legal entities; School trees handle academic operations—separate but aligned.\n---\n\n## 📅 The Time Engine: One Operational Reality\n\nIn most systems, the \"Academic Timetable\" and the \"Administrative Calendar\" are separate universes. This leads to double-bookings and invisible friction.\n\nIfitwala_Ed places teaching, meetings, exams, events, and maintenance on **One Shared Time Surface**.\n\n### The \"Fact Table\" Guarantee\n\nWe determine availability via **Fact Tables**, not inferred patterns.\n\n1. **Location Booking:** The single truth for room usage.\n2. **Employee Booking:** The single truth for human time (Teaching + Meetings + Leaves).\n\n\u003e **The Rule:** If a record exists in the fact table, the resource is busy. The system prevents conflicts at the database level, ensuring utilization analytics are 100% accurate.\n\n---\n\n## 🎓 Academic Model: Separation of Concerns\n\nWe separate **Curriculum** (what we plan) from **Delivery** (what we teach) and **Assessment** (how we measure).\n\n### 1. Curriculum Structure\n\n`Program` → `Course` → `Learning Unit` → `Lesson`\n\n* Curriculum is reusable and standards-friendly.\n* It exists independently of the academic year.\n* Academic year is educational scope only; accounting must use a separate fiscal year.\n\n### 2. Assessment as a Mode\n\nWe treat assessment as a flexible mode of interaction, not a rigid category. The same task engine supports:\n\n* **Binary Checks:** Complete/Incomplete.\n* **Points:** Traditional grading.\n* **Criteria/Rubrics:** Standards-based assessment.\n* **Observation:** Qualitative logs.\n\n### 3. Attendance as Data\n\nAttendance is not a separate module. It is recorded against real **Teaching Events**. Once recorded, it flows immediately into student profiles, reports, and longitudinal analytics.\n\n---\n\n## 👥 One System, Multiple Experiences\n\nIn an educational institution, a Nurse, a Teacher, and a Registrar should never experience the software in the same way.\n\nIfitwala_Ed delivers **tailored perspectives** from the same backend:\n\n| User | Experience | Focus |\n| --- | --- | --- |\n| **Academic Staff** | **Staff SPA** (Vue 3) | Streamlined for daily tasks: Attendance, Grading, Tasks. |\n| **Students/Parents** | **Portals** | Read-only views for Schedules, Reports, and Homework. |\n| **Admin/Ops** | **Desk Console** | Full access to Structure, HR, Assets, and Enrollment. |\n| **Leadership** | **Analytics Dashboards** | Trends, Utilization, Financial Health. |\n\n---\n\n## 📣 Communication \u0026 Operations\n\n### Precision Communication\n\nStop \"reply-all\" fatigue.\n\n* **Targeted Audiences:** Message specific groups (e.g., \"Grade 10 Parents\" or \"Science Faculty\").\n* **Morning Brief:** A daily digest that aggregates announcements relevant *only* to the user's role.\n* **Traceability:** A full archive of who sent what, to whom, and when it was read.\n\n### Health \u0026 Safeguarding\n\n* **Isolation:** Medical records are structurally isolated.\n* **Role-Gated:** Clinical details remain role-gated; aggregate Morning Brief clinic volume follows `Student Patient Visit` read permission.\n* **Integrated Workflow:** If a student visits the nurse, the teacher is notified of the absence context without revealing sensitive details.\n\n---\n\n## 🔐 Security, Privacy, and Trust\n\nIfitwala_Ed relies on the battle-tested security foundations of the **Frappe Framework**.\n\n* **Role-Based Access Control (RBAC):** Permissions are additive and contextual. A user can be a *Teacher* in the High School and a *Parent* in the Primary School simultaneously.\n* **Field-Level Security:** Hide sensitive fields (e.g., Home Address) from general staff.\n* **Audit Trails:** Every meaningful action—grade change, attendance modification, fee adjustment—is logged with a user timestamp.\n\n---\n\n## 🛠️ Technical Stack \u0026 Open Source Strategy\n\nIfitwala_Ed is **Open Source by design**. We believe institutions should own their infrastructure.\n\n* **Backend:** [Frappe Framework](https://frappe.io) v16 (Python/MariaDB/Redis)\n* **Required Frappe apps:** `ifitwala_drive` is a hard dependency and must be installed on the site with `ifitwala_ed`\n* **Frontend:** Vue 3, Tailwind CSS, Frappe UI\n* **License:** GPL-3.0\n\n### Why Self-Host?\n\n1. **Data Sovereignty:** You own the database. You control the backups.\n2. **Compliance:** Keep data within your national borders (GDPR, local regulations).\n3. **Extensibility:** Extend the data model without waiting for a vendor roadmap.\n\n---\n\n## 🎯 Who is this for?\n\n* **Schools \u0026 Colleges** tired of maintaining fragile integrations between 5+ systems.\n* **Universities** requiring a flexible hierarchy for multi-faculty management.\n* **IT Directors** who want clean, queryable SQL data and API access.\n* **EdTech Consultants** looking for a serious, open-source alternative to legacy ERPs.\n\n---\n\n### 📬 Get in Touch\n\nIf you are exploring **modern, open, analytics-driven infrastructure for education**:\n\n📧 **Email:** [f.deryckel@gmail.com](mailto:f.deryckel@gmail.com)\n\n---\n\n## ✅ Testing \u0026 CI\n\nThe repository includes a phased testing program with strict CI quality gates.\n\n### Local backend smoke tests (bench)\n\n```bash\nbench --site \u003cyour-site\u003e run-tests --app ifitwala_ed --module ifitwala_ed.schedule.test_enrollment_engine\nbench --site \u003cyour-site\u003e run-tests --app ifitwala_ed --module ifitwala_ed.schedule.doctype.program_enrollment_request.test_program_enrollment_request\nbench --site \u003cyour-site\u003e run-tests --app ifitwala_ed --module ifitwala_ed.api.test_guardian_home\n```\n\n### Local quality checks\n\n```bash\nruff check .\nbash scripts/contracts_guardrails.sh\nbash scripts/test_metrics.sh\n```\n\n### Repo developer CLI (`codex`)\n\nUse the repo-local wrapper to run CI-aligned commands:\n\n```bash\n./scripts/codex doctor\n./scripts/codex lint\n./scripts/codex backend-smoke --site \u003cyour-site\u003e\n./scripts/codex desk-build\n./scripts/codex spa-typecheck\n./scripts/codex ci --site \u003cyour-site\u003e\n```\n\nNotes:\n- `backend-smoke` runs the same default smoke modules as `.github/workflows/ci.yml`.\n- `ci` runs lint + frontend checks + backend smoke unless skip flags are set.\n- Use `--dry-run` to print commands without executing.\n\n### Unified asset build (Desk + SPA)\n\n```bash\nyarn build\n# bench build also triggers the same app build pipeline\n```\n\nProduction source maps are disabled by default. Enable only for incident debugging:\n\n```bash\nIFITWALA_ASSET_SOURCEMAPS=1 yarn build:desk\n```\n\n### SPA checks\n\n```bash\nyarn type-check:spa\n```\n\n### Required PR checks\n\n1. `backend-smoke`\n2. `backend-domain`\n3. `lint`\n4. `desk-build`\n5. `spa-typecheck-build`\n\nNightly heavy suites are defined separately in `.github/workflows/nightly.yml`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffderyckel%2Fifitwala_ed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffderyckel%2Fifitwala_ed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffderyckel%2Fifitwala_ed/lists"}