Skip to content

ldsgroups225/Yeko

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

854 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yeko — Elite EdTech SaaS for French-speaking Africa

Watch the video

Yeko is a multi-tenant EdTech platform designed to modernize school management in French-speaking Africa. It provides a comprehensive ecosystem for schools, teachers, students, and parents, focusing on "Confiance Absolue" (Absolute Trust) through robust architecture and rigorous security.


🏗️ Monorepo Architecture

This project is a TypeScript monorepo managed with pnpm 10.x, deploying primarily to Cloudflare Workers.

📱 Applications (apps/)

App Description tech Stack
yeko-core Platform-wide Admin Dashboard (Catalogs, Programs, School Mgmt) TanStack Start, Better Auth (core)
yeko-school School Management Hub (Enrollment, Billing, Classes) TanStack Start, Better Auth (school)
yeko-teacher Teacher PWA (Attendance, Grades, Messaging) TanStack Start, PGlite (Offline drafts)
data-service Shared Hono API & Data Processing Service Hono, @repo/data-ops

📦 Shared Packages (packages/)

  • @repo/data-ops: Centralized data layer (Drizzle ORM, Neon PostgreSQL, Better Auth schemas).
  • @workspace/ui: Shared component library built on Tailwind CSS v4 and shadcn/ui.
  • @repo/logger: Structured logging system based on LogTape.
  • @repo/queue-worker: Background job processing via Cloudflare Queues.
  • @workspace/typescript-config: Standardized TS configurations.

🛠️ Technology Stack

  • Frontend: React 19, TanStack Start (SSR), TanStack Router (File-based), Tailwind CSS v4, Motion.
  • Database: PostgreSQL on Neon (Serverless), Drizzle ORM.
  • Authentication: Better Auth with per-app cookie isolation.
  • Validation: Zod (Strict input sanitation).
  • Error Handling: @praha/byethrow (Result monad pattern — No-Throw Policy).
  • Offline Support: PGlite for local-first draft persistence in the Teacher app.
  • Payments: Polar.sh integration.
  • i18n: typesafe-i18n (Core/Teacher) and i18next (School) — French (Primary), English (Secondary).

🚀 Getting Started

Prerequisites

  • pnpm 10.28.2 or later.
  • Docker & Docker Compose (Highly recommended).
  • Wrangler CLI (for Cloudflare deployment).

Docker Development (Recommended)

Start the entire ecosystem with hot-reload:

# Spin up all services
make docker-up

# Access points:
# - Core:    http://localhost:3000
# - School:  http://localhost:3001
# - Teacher: http://localhost:3002
# - Service: http://localhost:8787

Local Development

If you prefer running outside Docker:

# 1. Initialize dependencies and build shared packages
pnpm run setup

# 2. Start specific applications
pnpm dev:yeko-core
pnpm dev:yeko-school
pnpm dev:yeko-teacher

📜 Core Principles & Safety

1. Multi-Tenant Isolation

Every school-scoped database query MUST include tenant filtering. Cross-tenant data leakage is treated as a critical security defect.

where(eq(table.schoolId, ctx.schoolId))

2. Result-Oriented Framework (No-Throw Policy)

We never throw raw exceptions in the data layer. Every async operation returns a ResultAsync.

const result = await getStudents(schoolId);
if (R.isFailure(result)) return handleError(result.error);

3. Internationalization (i18n)

All UI strings must be localized. Hardcoded French or English strings in JSX are prohibited.


🚢 Deployment

Deployments are handled via Cloudflare Workers:

pnpm deploy:yeko-core
pnpm deploy:yeko-school
pnpm deploy:yeko-teacher
pnpm deploy:data-service

📄 License

This project is licensed under the ISC License. See the LICENSE file for details.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors