You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: make the repo discoverable and contributor-ready
Rewrite the README opener with badges, a live-instance link and a
feature table, and add the community health files GitHub looks for:
CONTRIBUTING (setup, branch/commit conventions, the five things
reviewers actually check), SECURITY (private reporting, in/out of
scope for a multi-tenant app), CODE_OF_CONDUCT, issue forms and a
PR template.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01APEKg6qy9TcLausNecrg89
Thanks for considering a contribution. This is a real, running product, so the bar is "it works for every tenant and every role" — but the setup is a single `npm install` + `supabase start` away, and small fixes are very welcome.
4
+
5
+
## Ways to help
6
+
7
+
-**Good first issues** — [`good first issue`](https://github.com/guillermoscript/lms-front/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) and [`help wanted`](https://github.com/guillermoscript/lms-front/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
8
+
-**Bugs** — open an issue with the tenant, role, and steps to reproduce
9
+
-**Translations** — `messages/en.json` and `messages/es.json`; new locales welcome
10
+
-**Docs** — anything in `docs/` that was wrong or missing when you set up
11
+
-**Payment providers** — the provider contract lives in `lib/payments/` (see `docs/PROVIDER_AGNOSTIC_PAYMENTS_SPIKE.md`)
12
+
13
+
## Setup
14
+
15
+
Full walkthrough: [`docs/GETTING_STARTED.md`](docs/GETTING_STARTED.md). The short version:
16
+
17
+
```bash
18
+
npm install
19
+
cp .env.example .env.local # fill in the four local Supabase vars
20
+
supabase start && npm run db:reset
21
+
npm run dev # open http://lvh.me:3000 — NOT localhost
22
+
```
23
+
24
+
Seeded logins (all `password123`, local dev only) are listed in the [README](README.md#quick-start).
25
+
26
+
## Workflow
27
+
28
+
1. Branch from `master`: `<type>/<slug>-<issueNumber>` — e.g. `fix/payout-rounding-516`
3. Open a PR against `master`, filling in the template (what changed, why, how to QA)
31
+
4. CI runs typecheck + unit tests on every PR; lint is surfaced but non-blocking (there is a large pre-existing baseline — just keep the files *you* touch clean)
32
+
33
+
Before pushing:
34
+
35
+
```bash
36
+
npm run typecheck
37
+
npm run test:unit
38
+
npm run build # catches what typecheck alone misses
39
+
npx playwright test# if you touched auth, tenancy, or payments
40
+
```
41
+
42
+
## What reviewers look for
43
+
44
+
This is a **multi-tenant** app with **RLS as the security boundary**. Most review comments come from these five:
45
+
46
+
-**Every tenant-scoped query filters by `tenant_id`** — even though RLS also enforces it. Exceptions: `profiles`, `gamification_levels`, `lesson_completions`, and the exam child tables, which have no `tenant_id` column at all.
47
+
-**Reads go straight from components via RLS.** Server actions are for multi-step mutations, service-role work, and external APIs (Stripe, email) — not for ordinary reads.
48
+
-**`createAdminClient()` bypasses RLS.** If you use it, validate tenant ownership by hand before any write.
49
+
-**Tested with every relevant role** — student, teacher, admin — and on both seeded tenants.
50
+
-**Loading and error states handled**, and any new UI string added to both `en.json` and `es.json`.
51
+
52
+
Architecture, schema invariants, and the list of known pitfalls live in [`CLAUDE.md`](CLAUDE.md) — it is written for AI agents but it is the fastest orientation for humans too. Schema details: [`docs/DATABASE_SCHEMA.md`](docs/DATABASE_SCHEMA.md).
53
+
54
+
## Database changes
55
+
56
+
```bash
57
+
supabase migration new <name># never edit an applied migration
58
+
npm run db:reset # verify it applies from scratch, with the seed
59
+
npm run db:types # regenerate lib/database.types.ts, commit the diff
60
+
```
61
+
62
+
New tenant-scoped table? It needs `tenant_id`, RLS enabled, and policies — a table without policies is invisible to the app and a table without `tenant_id` leaks across schools.
63
+
64
+
## Security
65
+
66
+
Do not open a public issue for a vulnerability. See [SECURITY.md](SECURITY.md).
67
+
68
+
## Questions
69
+
70
+
Open a [Discussion](https://github.com/guillermoscript/lms-front/discussions) or comment on the issue you want to pick up.
Copy file name to clipboardExpand all lines: README.md
+43-3Lines changed: 43 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,31 @@
1
1
# LMS Platform
2
2
3
-
A multi-tenant SaaS Learning Management System. Schools run on subdomains (`school.platform.com`). Educators create and sell courses; students enrolland learn.
3
+
**Open-source, multi-tenant LMS for creators and schools.** Every school gets its own subdomain (`school.platform.com`), its own branding, and its own students. Educators build courses and sell them; students enroll, learn, take exams, and earn verifiable certificates.
|**Multi-tenancy**| Subdomain-per-school, tenant theming, per-tenant roles — one deployment, many schools. Isolation is enforced in Postgres with Row Level Security, not in application code. |
20
+
|**Courses**| Block-editor lessons with rich MDX components, exercises, checkpoints, exams with AI-assisted grading, progress tracking, FSRS spaced repetition. |
21
+
|**Payments**| Stripe Connect (platform fee + revenue split), PayPal, Lemon Squeezy, Solana, Binance, and manual/offline receipts for markets where cards fail. Provider-agnostic contract — adding one is a single module. |
22
+
|**Monetization**| One-off products, subscriptions, plan-based feature gating, payouts, invoices, revenue dashboard. Separate platform billing for schools paying you. |
23
+
|**AI tutor**| An MCP server (`mcp-server/`) exposing the LMS as tools + interactive widgets: drill practice, weak-topic remediation, exam readiness, ask-a-teacher. Works from any MCP client, auth'd via Supabase OAuth 2.1 with RLS intact. |
24
+
|**Engagement**| XP, levels, streaks, achievements, challenges, weekly leagues, coin store, certificates with public verification, community spaces with polls and moderation. |
-[`docs/MONETIZATION.md`](docs/MONETIZATION.md) — billing and payments
111
+
-[`docs/MCP_SETUP.md`](docs/MCP_SETUP.md) — the MCP server and AI tutor tooling
112
+
113
+
More in [`docs/`](docs/) — deployment, i18n, gamification, community spaces, the landing-page builder.
114
+
115
+
## Contributing
116
+
117
+
Contributions are welcome — bug reports, translations, docs fixes, new payment providers, features.
118
+
119
+
- Read [`CONTRIBUTING.md`](CONTRIBUTING.md) for the workflow and what reviewers look for
120
+
- Browse [`good first issue`](https://github.com/guillermoscript/lms-front/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) and [`help wanted`](https://github.com/guillermoscript/lms-front/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
121
+
- Questions and ideas: [Discussions](https://github.com/guillermoscript/lms-front/discussions)
122
+
- Found a vulnerability? [`SECURITY.md`](SECURITY.md) — please report it privately
123
+
- By participating you agree to the [Code of Conduct](CODE_OF_CONDUCT.md)
124
+
125
+
## License
126
+
127
+
[MIT](LICENSE) — free to self-host, fork, and build a business on.
0 commit comments