Initial commit

This commit is contained in:
KabundiNjuki
2026-10-05 16:40:36 +03:00
commit ff743a1397
108 changed files with 15390 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
# lukenya-university-marathon
This is a [Next.js](https://nextjs.org) project bootstrapped with [v0](https://v0.app).
## Built with v0
This repository is linked to a [v0](https://v0.app) project. You can continue developing by visiting the link below -- start new chats to make changes, and v0 will push commits directly to this repo. Every merge to `main` will automatically deploy.
[Continue working on v0 →](https://v0.app/chat/projects/prj_4drPsrNVDgEwcruGKroiMoJrP8cl)
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
# or
pnpm dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
## Learn More
To learn more, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
- [v0 Documentation](https://v0.app/docs) - learn about v0 and how to use it.
<a href="https://v0.app/chat/api/kiro/clone/muendo/lukenya-university-marathon" alt="Open in Kiro"><img src="https://pdgvvgmkdvyeydso.public.blob.vercel-storage.com/open%20in%20kiro.svg?sanitize=true" /></a>
## Backend connection
Race, price, edition and prize data come from the Frappe backend (`lukenya_marathon` app).
Nothing about races is hard-coded in the pages any more.
- `lib/lukenya-api.ts`: server-only calls to Frappe. Pages refresh their data every 60 seconds,
or immediately when the backend calls `POST /api/revalidate`.
- `lib/event-types.ts`: the data shapes the backend returns. Treat these as the contract.
- The browser never calls Frappe directly. It posts to this site's routes, which forward to Frappe:
- `POST /api/register` → `api.create_registration`
- `POST /api/payment/start` → `payments.start_payment` (returns the Paystack checkout link)
- `GET /api/payment/status?reference=…` → `payments.check_payment_status`
- Paystack sends the runner back to `/payment/return`, which waits for the server to verify the payment.
If `api.get_public_event` isn't available yet, the site falls back to the older
`api.get_event_categories` endpoint. Set `FRAPPE_EDITION` so that fallback only shows one edition.
Environment variables are listed in `.env.example`.