Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
One shared record connecting sightings, field work and outcomes for India's street animals. One animal, one history, across every organisation that meets it.
BusinessTypeScript · PLpgSQLGitHub @jaykapoor7OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Every street animal on the record.
StrayPaw is a community-powered web app and animal-welfare operations platform
for India's street animals. People report and explore animals on a live map;
NGOs and municipalities run cases, care, sterilisation and vaccination records,
imports, surveys and dashboards on top of the same data. It runs in any browser
and deploys to a URL — there is no native app.Read the full README ↗Every street animal on the record.
StrayPaw is a community-powered web app and animal-welfare operations platform for India's street animals. People report and explore animals on a live map; NGOs and municipalities run cases, care, sterilisation and vaccination records, imports, surveys and dashboards on top of the same data. It runs in any browser and deploys to a URL — there is no native app.
Live: https://straypaw.org
docs/ARCHITECTURE.md). Browser ──► Next.js (Vercel functions, region icn1 / Seoul)
│ server components + /api routes
▼
Supabase Postgres (ap-northeast-2 / Seoul)
• bounded public views (public_* )
• SECURITY DEFINER RPCs (list_public_spatial_cities, …)
• H3 cell rollups (spatial_city_cells)
• RLS on every base table
Vercel functions are pinned to icn1 (Seoul) to sit next to the Supabase
project in ap-northeast-2 (Seoul); every server-side database read is then
a local round trip rather than a cross-Pacific one. Full data-flow, the spatial
rollup pipeline, caching and the scalability model are in
docs/ARCHITECTURE.md.
The golden rule: no visitor request ever reads the whole register. Public surfaces read compact city/cell rollups and, only at close zoom, a bounded set of animals inside a viewport. See the performance contract in the architecture doc.
| Doc | What it covers |
|---|---|
docs/ARCHITECTURE.md | System map, data flow, spatial pipeline, caching/revalidation, performance contract, scalability to 1M+ |
docs/DATABASE.md | Schema overview, key tables/views/RPCs, RLS strategy, index strategy |
docs/IMPORTS.md | Chunked/resumable/idempotent import pipeline and the spatial refresh queue |
docs/QA-CHECKLIST.md | Manual QA pass before a release |
REVERT.md | Rollback options |
Requirements: Node 20+ (CI and production use 22/24), npm.
npm install
cp .env.example .env.local # fill in at least the NEXT_PUBLIC_SUPABASE_* values
npm run dev # http://localhost:3000
With no Supabase keys the app still runs; reads simply return empty. For real
data, set NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY (safe
to expose — all writes are guarded by RLS and SECURITY DEFINER functions).
See .env.example for the full list and what each variable does.
npm run typecheck # tsc --noEmit
npm run build # next build (prebuild guards against test fixtures)
npm run test:spatial # spatial engine + rollup regression
npm run test:master-import # import pipeline (+ :pagination :locality :staging :resume)
npm run test:sql-rpc-mapping # RPC argument-mapping guard
npm run test:e2e # Playwright (mobile + desktop)
The quality gate (.github/workflows/dev-check.yml) runs all of these plus
npm audit --omit=dev --audit-level=critical on every push/PR to main/dev.
Playwright boots a production build. On an image that ships its own Chromium,
point it at the binary: PLAYWRIGHT_CHROMIUM_PATH=/path/to/chrome npm run test:e2e.
Vercel is connected to this repo; pushing to main deploys production
(straypaw.org). Preview deployments build for every other branch. Region,
crons and git behaviour live in vercel.json.
/api/admin/spatial/refresh runs daily at 03:00 UTC to drain the
spatial refresh queue (see docs/IMPORTS.md). It is
authorised by CRON_SECRET — set that env var in Vercel or the scheduled
drain is rejected.REVERT.md.SQL lives in supabase/. Apply a migration set with the pooler URL
(Supabase → Connect → Session pooler):
SUPABASE_POOLER_URL='postgresql://…' npm run db:migrate -- pilot
Sets are defined in scripts/db-migrate.mjs
(pilot, rollout, register, wards, personal, all). The GitHub
Action Apply Supabase migration runs the same script with the
SUPABASE_POOLER_URL repository secret. Day-to-day schema changes are applied
as tracked Supabase migrations; recovery/hardening history is captured in
supabase/final-site-recovery.sql and
supabase/post-recovery-hardening.sql.
See docs/DATABASE.md for the schema and index strategy.
src/app/ Next.js routes (public pages, /app community, /partner org console, /api)
src/components/ React components (app shell, spatial map, casefile, partner, …)
src/lib/ Data layer, spatial engine, import pipeline, taxonomy, utilities
supabase/ SQL schema, migrations, RPCs, views, RLS (see docs/DATABASE.md)
scripts/ Migration runner, regression tests, import staging, media tooling
e2e/ Playwright specs (design, rebuild, report)
docs/ Architecture and operational documentation