Skip to content

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

sh
git clone https://github.com/STACK-42/schoolers.git
cd schoolers
bun install

Then 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.

sh
bun run dev

The 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

CommandWhat it does
bun run devDevelopment server with hot reloading
bun run buildProduction build into dist/
bun run previewServe a production build locally
bun run lintESLint across the repository
bun run formatPrettier, writing changes in place
bun run docs:devThis 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 site

Two 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.

Internal engineering documentation.