Der Kiez hat einen Ort. Reden, tauschen, treffen — hier, wo du wohnst. Community-Plattform für den Schillerkiez in Neukölln.
Translation pending
SocialHTML · TypeScriptGitHub @atakee72OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Mahalle — community platform for a Berlin neighbourhood (Schillerkiez): forum, calendar, marketplace, local news, open data. Astro 5 SSR + Svelte 5 + MongoDB. Read-only demo: demo.mahalle.digital
Loading the full README.
Read the full README ↗A modern, performant community web application built with Astro, TypeScript, and React — live at mahalle.digital, serving the Schillerkiez neighborhood in Berlin-Neukölln.
🔎 For reviewers (recruiters, hiring managers): try the read-only demo at demo.mahalle.digital — two one-click roles (member, admin), fictional content, no sign-up. Then read docs/ENGINEERING.md: a 10-minute path through the architecture, five files worth reading, three postmortems, the testing and security posture, and how this project is built with AI tools.
📜 Read the Mahalle Manifesto — the project's moral charter. It describes who Mahalle is for, what it must remain, and what it refuses to become. Anyone deploying, forking, or contributing to this project is expected to honor it.
transition:, Web Animations API for is:inline scripts, Astro View Transitions$state for UI (no Zustand/Redux)createQuery/createMutation (@tanstack/svelte-query 6) in the islands, plain fetch helpers elsewherefra1 — co-located with the Frankfurt Atlas cluster)src/
├── components/ # React (.tsx) and Svelte (.svelte) components
├── layouts/ # Astro layouts (KioskLayout, LandingLayout, AuthLayout, AdminLayout, blog/*)
├── pages/ # File-based routing
│ ├── api/ # API routes (serverless functions)
│ │ ├── auth/ # Registration endpoint
│ │ ├── topics/ # Forum CRUD
│ │ ├── events/ # Calendar events CRUD
│ │ ├── announcements/
│ │ ├── recommendations/
│ │ ├── comments/
│ │ ├── likes/
│ │ ├── views/
│ │ ├── news/ # Newsboard CRUD, daily fetch, save/unsave
│ │ ├── listings/ # Marketplace listings CRUD
│ │ ├── reports/ # User report submission
│ │ ├── admin/ # Admin moderation APIs
│ │ ├── kiez-stats.ts # Schillerkiez demographics + social API
│ │ └── kiez-air.ts # Live BLUME air quality proxy
│ └── *.astro # Page components
├── hooks/
│ └── api/ # marketplace fetch helpers (plain functions)
├── lib/
│ ├── mongodb.ts # Database connection
│ ├── auth.ts # Auth utilities
│ ├── moderation.ts # AI moderation + profanity filters (TR/EN/DE) + leetspeak
│ └── queryUtils.ts # Query helpers
├── schemas/ # Zod validation schemas
├── styles/ # Global CSS (dark-glass utilities, carved titles)
├── types/ # TypeScript types
└── utils/ # Helper functions
The app has completed its migration (July 2026) from a dark-glass aesthetic (deep indigo #0e1033 + purple radial gradient + glass surfaces) to a kiosk aesthetic (paper-warm surfaces, ink borders, print shadows, carved-italic title accents, DM Mono kickers, Instrument italic copy).
| Surface | State |
|---|---|
Landing „Das Schaufenster" (/, plus /impressum, /datenschutz) | ✅ Kiosk (Svelte island, own LandingLayout) — public front door, members SSR-redirect to /forum |
Forum (/forum, /topics/[id], /announcements/[id], /recommendations/[id]) | ✅ Kiosk (Svelte) |
Calendar (/calendar, /events/edit/[id]) | ✅ Kiosk (Svelte) |
Newsboard (/newsboard, /newsboard/[id], /newsboard/submit) | ✅ Kiosk (Svelte) |
Marketplace (/marketplace, /marketplace/[id], /marketplace/create, /marketplace/edit/[id]) | ✅ Kiosk (Svelte) |
Auth (/login, /register, /forgot-password, /reset-password, /verify-email) | ✅ Kiosk (Svelte, own AuthLayout) |
Admin moderation (/admin/moderation) | ✅ Kiosk (Svelte, own AdminLayout) |
Admin announcements (/admin/announcements) | ✅ Kiosk (Svelte, own AdminLayout) |
Profile (/profile, /nachbarn/[handle], /steckbrief) | ✅ Kiosk (Svelte) — complete (Plan A: own profile; Plan B: public neighbor profiles, e-mail/password change, account deletion) |
Kiez Data (/schillerkiez, /schillerkiez/druck) | ✅ Kiosk (Svelte) — legacy carousel dashboard removed |
Blog (/blog, /blog/[slug], /blog/tag/[tag]) | ✅ Kiosk (Svelte, own StandardLayout/HeroLayout/GalleryLayout) — "Die Beilage", SSR on every route, legacy dark-glass blog removed |
Each migrated page has its own accent color used for kickers (mono-uppercase eyebrows) and carved-italic title accents:
| Page | Accent |
|---|---|
| Forum | Wine #b23a5b |
| Calendar | Teal #3f8f9f |
| Newsboard | Ink #1b1a17 |
| Marketplace | Wine #b23a5b (kickers) + Ochre #eccc6e (italic headline accents only) |
| Auth | Ochre #e8a53a |
| Admin | Plum #6f2f59 |
| Profile | Ochre #e8a53a (shared with Auth) |
| Kiez Data | Moss #6b8a4a |
| Blog | Rust #a3552e |
Semantic accents stay constant across all kiosk surfaces (never swapped per page): live-now indicator (ochre dot), today indicator, weekend-day labels, required-field asterisks, compose step numbers (01, 02, …), CTA wine-shadows, modal wine-shadows, the mobile wine FAB.
This is the beginning of the README. Read the rest at the original. Read the full README ↗