A production-ready Next.js 15 app with App Router, TypeScript, Tailwind CSS, and shadcn/ui defaults. The structure is organized for scalable teams with shared layout components, reusable UI, and Appwrite placeholders.
npm run dev
npm run build
npm run start
npm run lintsrc/
app/ App Router routes
components/ Reusable layout and UI primitives
lib/ Utilities and Appwrite placeholders
Install dependencies and set the following variables in .env.local when you are ready to connect the Appwrite SDK:
NEXT_PUBLIC_APPWRITE_ENDPOINT=
NEXT_PUBLIC_APPWRITE_PROJECT_ID=
NEXT_PUBLIC_APPWRITE_DATABASE_ID=
NEXT_PUBLIC_APPWRITE_BUCKET_ID=
APPWRITE_API_KEY=Client-safe helpers live in src/lib/appwrite/client.ts, while server-only helpers live in src/lib/appwrite/server.ts.
Use the schema bootstrap script to create or reconcile the Appwrite database collections and relationships used by the tutors experience:
npm run appwrite:setupIt creates the subject taxonomy, tutor profiles, tutor applications, students, tutor reviews, ads, and site pages schemas in the configured Appwrite database.
Use the staff bootstrap script to create the Appwrite teams used for private tutor application review:
npm run appwrite:setup-staffThis creates the staff_admins and staff_recruitment teams. Add the correct Appwrite users to those teams in the Console so they can access the staff dashboard.
Staff members can review tutor applications at:
/admin/tutor-applications/staff/tutor-applications
The repository includes a GitHub Actions workflow at .github/workflows/deploy.yml that:
- restores the Next.js cache with
actions/cache - runs
npm ci,npm run lint, andnpm run build - packages the standalone build output for a precompiled deployment
- deploys only on pushes to
main
Add these GitHub secrets before enabling the deploy job:
APPWRITE_ENDPOINTAPPWRITE_PROJECT_IDAPPWRITE_API_KEYAPPWRITE_SITE_ID
The Appwrite CLI is authenticated in CI with:
appwrite client \
--endpoint "$APPWRITE_ENDPOINT" \
--project-id "$APPWRITE_PROJECT_ID" \
--key "$APPWRITE_API_KEY" \
--self-signed falseAfter that, the workflow uploads the prebuilt bundle with:
appwrite sites create-deployment --site-id "$APPWRITE_SITE_ID" --code ./deploy