Getting started
What you are working on
A bilingual (English and Arabic, with right-to-left support) alumni directory built as a single web application. Members create a profile, an administrator reviews it, and once approved the profile becomes publicly visible in a searchable directory. Administrators also publish announcements that appear in a community feed.
The application is one deployable unit. There is no separate backend service: the React frontend talks to a self-hosted Supabase instance directly, and PostgreSQL decides what each caller is allowed to see.
What you need installed
- Bun — the package manager and script runner for this project. npm works if you prefer it, but the lockfile committed to the repository is
bun.lock, so use Bun unless you have a reason not to. - Node.js 22 or newer — the production container runs on Node, and some tooling expects a reasonably modern runtime.
- Docker — not required to run the app itself, but required if you want to run a local database rather than working against the shared one.
First run
git clone https://github.com/STACK-42/schoolers.git
cd schoolers
bun installThen create your environment file. There is no committed template yet, so ask another contributor for the variable names, or read Environment variables, which lists every one the application reads and what it is for.
bun run devThe development server prints a local address. The application should load, and you should be able to browse the directory without signing in, because verified profiles are public.
The scripts you will use
| Command | What it does |
|---|---|
bun run dev | Development server with hot reloading |
bun run build | Production build into dist/ |
bun run preview | Serve a production build locally |
bun run lint | ESLint across the repository |
bun run format | Prettier, writing changes in place |
bun run docs:dev | This documentation site, locally |
There is no test suite in this repository. That is a real gap rather than a deliberate choice, and it means review and manual verification carry more weight than they otherwise would.
Repository layout
src/
routes/ file-based routes; the URL structure of the app
components/ React components, including the shadcn/ui set in components/ui
hooks/ shared React hooks, including session and role hooks
lib/ non-React logic: i18n, directory constants, image handling
integrations/ the Supabase clients and auth middleware
supabase/
migrations/ every database change, in order, as SQL
docs/ this documentation siteTwo things in that tree are generated and should never be hand-edited: src/routeTree.gen.ts, which the router plugin rewrites on every build, and the generated Supabase type definitions in src/integrations/supabase/.
Before your first change
Read How we work for the branch and review conventions. If your change involves the database in any way, Reviewing database changes is not optional reading.