Web app for storing and searching Levantine Arabic texts, examples, vocabulary, structures, and morphological patterns. The database is the source of truth. An LLM layer is optional and not required.
Patterns are word-formation moves (double middle, denominal verb, and so on). They hang off vocabulary and roots. You create a pattern by connecting word pairs you already know, then naming the move — or by reviewing Suggestions from npm run discover:patterns (pair-first: both sides of a relationship must exist in vocabulary, and at least two independent pairs sharing the same move are required before a suggestion). Structures stay chunks and idioms (عم + participle, بدي…). Do not mix the two.
- Next.js (App Router) + TypeScript + Tailwind CSS
- Supabase Auth (email + password) + Postgres + RLS
- Vercel for hosting
- Copy
.env.exampleto.env.localand set:NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY(or legacy anon key)ALLOWED_EMAILS(your email)NEXT_PUBLIC_SITE_URL(http://localhost:3000for local use)
- Create a Supabase project. Apply
supabase/migrations/20260809100000_init.sqlin the SQL editor, or use the Supabase CLI afternpx supabase link. - In Supabase Auth:
- Users: create your account (email + password). There is no public
/sign-uproute. - Providers: keep Email enabled. Disable public signup after the account exists (Auth settings /
enable_signup = falsefor local CLI). - URL Configuration: set Site URL to the production origin (for example
https://YOUR_DOMAIN). Keep/auth/callbackin Redirect URLs for password recovery and other email links:http://localhost:3000/auth/callbackhttps://YOUR_DOMAIN/auth/callback- optional previews:
https://*-YOUR_TEAM.vercel.app/auth/callback
- Users: create your account (email + password). There is no public
- Install and run:
npm install
npm run devOpen http://localhost:3000, sign in with your allowlisted email and password, then create a text.
Do not commit .env.local or any file with real keys, project URLs, or emails. Use .env.example as the template only.
Done in this slice:
-
Schema + RLS for texts, examples, vocabulary, senses, structures, tags, joins
-
Email + password auth with email allowlist (public signup off after setup)
-
App shell (Search / Texts / Vocabulary / Patterns / Structures + Add menu)
- Manual (corner) covers how-to + Sources playbook; footer shows build time
-
Texts CRUD with RTL Arabic paste/save
-
LLMProvider = nonestub
Still in Phase 1:
- Vocabulary / structures / examples CRUD + pickers
- L1 search (mixed result list)