Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
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
README 전체를 불러오는 중입니다.
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.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗