ShowcaseVencislav Manoilov on GitHub

Thirteen products, one server

Each is a different kind of product on a different stack, in 10 languages, with its own data, its own design and a reset every night. All of them are running. Open any one and use it.

Asking the status page how everything is.

Forno Notte’s kitchen screen: the oven’s temperature over two hours, and dockets in four columns
16 : 10 Forno Notte’s kitchen screen, which moves while you watch it.

The products

Thirteen products. Open a row for a look at it and something to try.

  1. 01Bolt & BowlOnline shopTypeScriptChecking

    A shop for cloth, pots and tools from small workshops, with a staff side for stock, fulfilment and refunds.

    Back end
    Next.js 16, Server Actions, Prisma
    Front end
    React 19
    Data
    PostgreSQL

    Search for "lnen" with the typo, check out with a demo card, then follow the order from the staff side.

    Open Bolt & Bowl

  2. 02RolodeckCRMJavaChecking

    A sales team’s pipeline for a commercial solar installer: companies, contacts, a deal board, forecasts and a JSON API.

    Back end
    Spring Boot, Spring Security, JPA, Flyway
    Front end
    Thymeleaf with HTMX
    Data
    PostgreSQL

    Sign in as a rep and drag a deal along the board; the forecast on the dashboard moves with it.

    Open Rolodeck

  3. 03FeltboardKanban boardElixirChecking

    A board for a fruit and veg box round that moves for everyone at once, with limits on work in progress.

    Back end
    Phoenix LiveView, Ecto, PubSub, Presence
    Front end
    LiveView
    Data
    PostgreSQL

    Open the board in two windows and drag a card in one: it moves in the other, and you can see who is looking.

    Open Feltboard

  4. 04Millrace LidoBookingsPythonChecking

    Booking for an outdoor pool and sauna: a fortnight’s timetable, swim passes, QR tickets and a front desk.

    Back end
    Django, Django REST framework, Celery
    Front end
    Templates with HTMX and Alpine
    Data
    PostgreSQL, Redis

    Book a swim, then check yourself in at the front desk with the ticket’s code.

    Open Millrace Lido

  5. 05SwitchbackHelp deskPHPChecking

    Support for a maker of soil probes: an inbox with service clocks, and each ticket beside a map of the farm.

    Back end
    Laravel, Inertia, queues
    Front end
    Vue 3 with TypeScript
    Data
    PostgreSQL, Redis

    Open a ticket about a silent probe and find the probe, its battery and its last reading pinned on the map.

    Open Switchback

  6. 06RemitInvoicingC#Checking

    Invoicing for a design studio: live previews, PDFs, payments in parts, reminders and a bank feed to match.

    Back end
    ASP.NET Core 10, EF Core, QuestPDF
    Front end
    Blazor
    Data
    PostgreSQL

    Draft an invoice and watch the preview set itself, then open the PDF the client would get.

    Open Remit

  7. 07SightlineWeb analyticsGoChecking

    Privacy-friendly analytics counting this showcase’s own visitors, live, without cookies.

    Back end
    chi, pgx, templ
    Front end
    HTMX with charts
    Data
    PostgreSQL, Redis

    Open the live count, then come back here: your own visit is on it.

    Open Sightline

  8. 08NatterTeam chatRustChecking

    Chat for the volunteers of a community radio station: channels, threads, reactions, search, all live.

    Back end
    Axum, Tokio, SQLx, WebSockets
    Front end
    React 19 with TanStack Query
    Data
    PostgreSQL, Redis pub/sub

    Mention a volunteer in a thread: they start typing, then answer, a few seconds later.

    Open Natter

  9. 09VorkursCoursesRubyChecking

    A short-course school of wood, print and clay: enrolment, lessons, quizzes, discussion and marked work.

    Back end
    Rails 8, Solid Queue, Solid Cable
    Front end
    Hotwire
    Data
    PostgreSQL

    Enrol on a course, take a lesson’s quiz, and watch the discussion under it update by itself.

    Open Vorkurs

  10. 10GableEstate agentPythonChecking

    An estate agent’s homes to buy and rent, searched by the particulars or by saying what you are after.

    Back end
    FastAPI, SQLAlchemy 2, Alembic, fastembed
    Front end
    Nuxt 4 rendering on the server
    Data
    PostgreSQL with pgvector

    Search for "room for horses" and see the barn come first, then ask for a viewing.

    Open Gable

  11. 11Forno NotteOrdering and kitchen displayKotlinChecking

    Collection orders for a wood-fired pizza kitchen, and the screen the kitchen works from, all live.

    Back end
    Ktor 3, Exposed, Flyway, server-sent events
    Front end
    SvelteKit with Svelte 5
    Data
    PostgreSQL

    Order a pizza, keep its page open, and press Start on its docket in the kitchen screen.

    Open Forno Notte

  12. 12SituationsJob board and applicant trackingTypeScriptChecking

    A job board read like a magazine’s situations vacant, and the office where employers work the letters.

    Back end
    NestJS, GraphQL with Apollo, Mongoose, BullMQ
    Front end
    Angular 22 with Apollo Angular
    Data
    MongoDB, Redis

    Apply for a job, then sign in to the office as its employer: the letter is there, and it is being read.

    Open Situations

  13. 13SignalboxStatus pageTypeScriptChecking

    The status of everything on this page, checked every thirty seconds, with ninety days of history.

    Back end
    Bun, Hono, Drizzle, JSX on the server
    Front end
    Server-rendered pages
    Data
    SQLite

    Open any service to see its checks, its latency and the incidents it has had.

    Open Signalbox

One of them, opened: Forno Notte

A pizza kitchen’s oven bakes eight in ten minutes, so every collection time has eight places, and two customers must never both get the last ones. Every screen has to be live: the kitchen’s, and each customer’s own order page.

The menu, with the oven’s temperature read live beside the first time with room
16 : 10 The menu reads the oven every twenty seconds.
  1. A lock per collection time

    Placing an order takes a PostgreSQL advisory lock on its collection time before counting the oven’s places. A test sends five orders at once for eight places and expects exactly two through; without the lock, all five pass.

  2. One stream, sliced

    Everything that happens goes down one Kotlin SharedFlow. The kitchen’s server-sent events read all of it; a customer’s read only their own order, starting from a snapshot taken after subscribing, so nothing slips between.

  3. A reset that tells everyone

    The nightly reset runs as its own process and ends with a PostgreSQL NOTIFY. The server listens on a connection of its own and tells every open screen to reload.

Order a pizza Open the kitchen screen

What I build

  1. Back ends in 10 languages, from Rust and Go to Elixir and C#, each tested against the database it really uses.
  2. Front ends rendered on the server, in the browser or both: React, Vue, Svelte, Angular, LiveView, Hotwire and HTMX.
  3. Live features over WebSockets, server-sent events and LiveView: boards, chat, kitchens and offices that move for everyone.
  4. Data in PostgreSQL with pgvector, MongoDB, Redis and SQLite, with migrations, queues and scheduled work.
  5. The running of it: one server, a router, per-product users, health checks and a reset every night.

Where it runs

One server and three containers. A request comes in through Cloudflare to Caddy on the host, and from there to the router inside the apps container, which sends it on by path.

  1. A visitor
  2. Cloudflare
  3. Caddy on the server
  4. The router, by path

showcase-apps

Every product as its own user under supervisord, with Redis beside them for queues and pub/sub.

PathProductServed byNow
/shopBolt & BowlNode.js, the Next.js standalone serverChecking
/crm/RolodeckA JVM running Spring BootChecking
/tasks/FeltboardThe BEAM, a Phoenix releaseChecking
/book/Millrace LidoGunicorn, and a Celery worker with its beatChecking
/help/SwitchbackPHP-FPM, a queue worker and the schedulerChecking
/invoices/Remit.NET, the Kestrel serverChecking
/analytics/SightlineOne Go binaryChecking
/chat/NatterOne Rust binaryChecking
/learn/VorkursPuma, with Solid QueueChecking
/homes/GableUvicorn for the API, Node.js for NuxtChecking
/order/Forno NotteA JVM running Ktor on NettyChecking
/jobs/SituationsNode.js, NestJS with its queue workersChecking
/status/SignalboxBunChecking

showcase-postgres

PostgreSQL with pgvector: a database and a user for each product that needs one.

showcase-mongo

MongoDB, for Situations’ board and its CVs in GridFS.