No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗https://myotherapp.in: events and clubs near you, each event's and club's page, the clubs' posts, registration, tickets, the live room. (www.myotherapp.in and events.myotherapp.in redirect to it.)
Next.js 16 (App Router), React 19, plain JavaScript. Every public page is rendered on the server: events, clubs, posts, the home page and the site's own pages are regenerated at most once a minute (ISR); the find pages (/events, /clubs) are rendered for their address and kept a minute at the edge. The signed-in and transactional pages (registration, tickets, the live room) are rendered on the server too, and hydrate in the browser. How the site is put together, which page is which, and how to add a page: docs/NEXT_MIGRATION.md.
npm ci
npm run dev # http://localhost:3000, against the production API (reads only, unless you sign in)
npm test # vitest
npm run lint
npm run build && npm start
node scripts/check-seo.mjs http://localhost:3000 # what a crawler sees: HTML, JSON-LD, 308s, 404s, sitemap, feeds
Search (titles, structured data, the city pages, the demo clubs, Search Console): docs/SEO.md.
Node 20.9 or newer. The API allows only the site's own origins, so pages that call it from the browser (the client pages) need a local API, or the browser's CORS checks off, on localhost; server-rendered pages work as they are.
Set these on the Vercel project (Production and Preview). NEXT_PUBLIC_* values are written into the browser bundle at build time, so a change needs a new deploy.
| Variable | What it is | Default |
|---|---|---|
NEXT_PUBLIC_API_BASE_URL | The API's origin, without /api/v1 | https://api.myotherapp.in |
API_BASE_URL | The API's origin for the server only (a private address, say) | NEXT_PUBLIC_API_BASE_URL |
NEXT_PUBLIC_GOOGLE_CLIENT_ID | Google sign-in's web client id; unset, the site has no sign-in | none |
NEXT_PUBLIC_RAZORPAY_KEY | Razorpay's publishable key, for orders that don't bring their own | none |
NEXT_PUBLIC_PLAY_STORE_URL | "Get the app" on Android | the Play Store listing |
NEXT_PUBLIC_APP_STORE_URL | "Get the app" on iPhone; unset, it says "coming soon" | none |
REVALIDATE_SECRET | Turns on POST /api/revalidate (the API saying an event or club changed) | off |
API_SITE_TOKEN | Sent to the API as X-Site-Token on every server read, for it to tell the site's server from a visitor; the API counts all site reads in one bucket for the token. With it, reads made for one visitor also send X-Visitor-IP (their address, from Vercel's X-Forwarded-For), used to place them and, for the certificate check (/verify/…, and a certificate's own page, /certificates/{public id}), as the person the API counts the check against. Needed for /verify: without it every visitor's check counts against Vercel's shared addresses (20 a minute between them). Never sent from the browser | not sent |
ANDROID_APP_SHA256 | The Android app's signing-certificate SHA-256 fingerprints, comma-separated, for /.well-known/assetlinks.json. Use the Play App Signing key's (Play Console → Test and release → App integrity → App signing); add the upload key's as well to test a locally signed build. Colons and case don't matter. Read at build, so set it, then deploy | unset: assetlinks.json is [], and Android opens the links in the browser |
DEMO_NOINDEX | off turns off everything below about the demo clubs: their pages are indexed and listed again. Server only; redeploy after changing it |
.env.example lists them all, for a local .env.local.
Off until NEXT_PUBLIC_SENTRY_DSN is set on the Vercel project (Production, and Preview if wanted), then redeploy. Without it nothing is loaded, nothing listens and nothing is sent; src/sentry/sentry.test.js holds that.
This is the beginning of the README. Read the rest at the original. Read the full README ↗
| on |
DEMO_CLUB_SLUGS | The demo clubs' slugs, comma-separated; replaces the built-in list of eight ("": none, so only is_demo and a demo.myotherapp.in address count) | the eight seeded clubs |
NEXT_PUBLIC_SENTRY_DSN | The Sentry project's DSN: turns error tracking on, in the browser and on the server (see below). Unset, Sentry is off and its code is never loaded | off |
NEXT_PUBLIC_SENTRY_ENVIRONMENT | The environment events are filed under | Vercel's production / preview; local for any other build |
NEXT_PUBLIC_SENTRY_RELEASE | The release events are filed under | moa-events@<commit> |
NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE | The share of page loads and server requests traced, 0 to 1 | 0.05 |
NEXT_PUBLIC_SENTRY_REPLAYS_ON_ERROR_RATE | The share of sessions that hit an error recorded as a replay (every word, input and picture masked), 0 to 1 | 0: no replay |
SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT | Build only, all three or none: the source maps (browser and server) are uploaded to Sentry for the release, then deleted from the build so they are never served; a failed upload is logged and the build goes on. The token is an organization auth token (Sentry → Settings → Auth Tokens) | not uploaded |