managarten/apps/citycorners/apps/landing
Till JS 94d7e2bd02 feat(citycorners): add slugs, contacts, collections, clustering, rate limiting, soft deletes
1. SEO Slugs: Auto-generated from name (ä→ae, ö→oe, etc.), unique with
   -2/-3 suffix. Routes accept both UUID and slug. Seed data includes slugs.

2. Opening Hours + Contact: website, phone, openingHours fields in schema.
   Displayed on detail page, editable in add/edit forms.

3. Landing Page with API: Fetches locations from backend at build time,
   falls back to hardcoded JSON if API unreachable.

4. Frontend Tests: Vitest setup with api.test.ts (50 backend + web tests).

5. Marker Clustering: leaflet.markercluster for 10+ locations on map,
   direct markers for fewer.

6. Favorite Collections: New collections table with CRUD endpoints.
   Favorites page has tabs for favorites vs collections. Create, view,
   delete collections with location management.

7. Rate Limiting: In-memory guard (10 req/min) on write endpoints.
   Returns 429 with retryAfter.

8. Soft Deletes: deletedAt field, all reads filter deleted records.
   POST /locations/:id/restore endpoint for owners.

50 backend tests passing, 0 type errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:27:29 +01:00
..
public feat(manacore): add costs overview tab to credits page 2026-03-24 10:10:44 +01:00
src feat(citycorners): add slugs, contacts, collections, clustering, rate limiting, soft deletes 2026-03-24 12:27:29 +01:00
.gitignore feat(citycorners): add city guide app for Konstanz with full monorepo integration 2026-03-23 10:56:26 +01:00
astro.config.mjs feat(citycorners): add PWA, i18n (DE/EN), and migrate landing to Tailwind 2026-03-23 11:11:51 +01:00
package.json feat(citycorners): add PWA, i18n (DE/EN), and migrate landing to Tailwind 2026-03-23 11:11:51 +01:00
README.md feat(citycorners): add city guide app for Konstanz with full monorepo integration 2026-03-23 10:56:26 +01:00
tailwind.config.mjs feat(citycorners): add PWA, i18n (DE/EN), and migrate landing to Tailwind 2026-03-23 11:11:51 +01:00
tsconfig.json feat(citycorners): add city guide app for Konstanz with full monorepo integration 2026-03-23 10:56:26 +01:00
wrangler.toml feat(citycorners): add city guide app for Konstanz with full monorepo integration 2026-03-23 10:56:26 +01:00

Astro Starter Kit: Basics

npm create astro@latest -- --template basics

🧑‍🚀 Seasoned astronaut? Delete this file. Have fun!

🚀 Project Structure

Inside of your Astro project, you'll see the following folders and files:

/
├── public/
│   └── favicon.svg
├── src
│   ├── assets
│   │   └── astro.svg
│   ├── components
│   │   └── Welcome.astro
│   ├── layouts
│   │   └── Layout.astro
│   └── pages
│       └── index.astro
└── package.json

To learn more about the folder structure of an Astro project, refer to our guide on project structure.

🧞 Commands

All commands are run from the root of the project, from a terminal:

Command Action
npm install Installs dependencies
npm run dev Starts local dev server at localhost:4321
npm run build Build your production site to ./dist/
npm run preview Preview your build locally, before deploying
npm run astro ... Run CLI commands like astro add, astro check
npm run astro -- --help Get help using the Astro CLI

👀 Want to learn more?

Feel free to check our documentation or jump into our Discord server.