ПРОгресивно. ПРОзоро. ПРОсто.
Your personal urban rhythm.
GitHub → github.com/shepiitkod/prostir-web
Static UI is deployed from the gh-pages branch on every push to main or master (see .github/workflows/deploy.yml). In the repo Settings → Pages, set the source to Deploy from a branch → gh-pages → / (root).
If your fork uses another owner or repository name, update homepage in package.json and the badge URL above. The build uses GITHUB_REPOSITORY to prefix asset paths (e.g. /prostir-web/app.css).
Limits on Pages: there is no Node/Express API on GitHub Pages. Flows that call /api/…, Diia auth against your server, and the venue email form need a separate backend (e.g. Render, Fly.io) or localhost.
PROSTIR is a premium urban operating system for city dwellers. It lets you book a restaurant table, reserve a coworking desk, and connect with people nearby — all verified in 10 seconds through Diia (Ukraine’s state digital identity app). No passwords. No friction. One tap and you’re in.
The product is built as a high-fidelity front-end prototype with a live Node.js/Express backend, demonstrating a complete booking flow from authentication to zero-click Safe Exit auto-payment.
| Module | Description |
|---|---|
| Dine | Interactive SVG floor plan for Cafe Aura. Select a table, pick a time slot, sign via Diia. Digital receipt with cinematic reveal animation. |
| Working | Coworking desk grid with live availability status. Click a zone card to highlight the corresponding desk area. |
| Moments | Privacy-first social discovery. Ghost Mode toggle, opt-in connection requests, Diia-verified profiles only. |
| Business | Partner dashboard mockup — live floor plan editor, revenue analytics chart with draw-in animation, customer flow bar chart. |
| Profile | User profile page with active bookings, history, settings (Ghost Mode, Safe Exit auto-pay, push notifications), and Diia verification status. |
faq.js)clamp(), backdrop-filter, @property, conic-gradientIntersectionObserver for scroll-triggered animationsrequestAnimationFrame spring physics engine (stiffness 150, damping 15)sessionStorage (intro once) + localStorage (theme, language)db.json — flat-file JSON data store (no database dependency)/public| Method | Endpoint | Description |
|---|---|---|
GET |
/api/tables/:venueId |
Get tables for a venue |
GET |
/api/desks/:venueId |
Get coworking desks for a venue |
GET |
/api/apartments |
Get apartment listings |
GET |
/api/bookings |
Get all bookings |
POST |
/api/book |
Create a new booking |
DELETE |
/api/bookings/:id |
Cancel a booking |
prostir/
├── public/
│ ├── index.html # Landing page + Live Widgets + How It Works
│ ├── dine.html # Restaurant table booking
│ ├── working.html # Coworking desk booking
│ ├── moments.html # Social discovery (Ghost Mode)
│ ├── business.html # Partner / Business page
│ ├── profile.html # User profile & settings
│ ├── app.css # Global styles
│ ├── faq.js # Shared FAQ slide-up drawer
│ ├── delight.js # Micro-interaction layer
│ └── assets/ # Workspace images
├── server.js # Express server + REST API
├── db.json # Local data store
└── package.json
# Install dependencies
npm install
# Start the server (compile first: npm run build — listens on PORT or 8080, host 0.0.0.0)
npm start
Open http://localhost:8080. For Diia mock redirects when the API is public, set PUBLIC_APP_URL to that same public URL (e.g. https://prostir-web-production.up.railway.app on Railway).
| Token | Value |
|---|---|
| Accent | #8B5CF6 Neon Violet |
| Background (light) | #FFFFFF Pure White |
| Background (dark) | #000000 Pure Black |
| Card (dark) | #0D0D0F with 32px radius |
| Font | System UI stack (-apple-system, Inter, Segoe UI) |
| Mono font | SF Mono, JetBrains Mono, monospace |
| Base grid | 8px / 16px |
| Transitions | cubic-bezier(0.22, 1, 0.36, 1) |
Front-end prototype — UI/UX complete, mock API live.
Backend with real database, Diia OAuth integration, and push notifications are the next milestone.
Built with intent. Designed for Kyiv.