UniMeet sells stands at university fairs across the Western Balkans and campus visits in Europe. The commercial path is short and unforgiving: event page, registration form, sales conversation, invoice offline. Every fair needed the same page without the content model giving up, the price shown live had to match the price confirmed later, and the buyers were university staff, many at public bodies with their own accessibility expectations.
— Case study 10
UniMeet
University fairs sold through one standardised event page, plus the social plan that fills them

project overview
A recruitment website for European universities: an admin-driven event engine where one tour record becomes a standardised fair page ending in a priced registration form, plus Instagram and LinkedIn plans and a post builder rendering the brand's own slides.
shipped outcome
Delivered on the client's v1 identity at unimeet.eu, with registrations persisted and emailed, axe-clean at 390, 768 and 1440 wide, and a sitemap-driven SEO pass with a generated share card per page. The screenshots here are the proposed v2 design system built alongside it; the client chose to keep v1 live.
- Role
- Full-stack product engineering · social strategy
- Timeline
- Delivered October 2026
- Year
- 2026
- Team
- Solo delivery, with the client's brand designer
One Payload collection with a kind discriminator drives every fair and campus page in a fixed section order, so a new tour is data entry, not design. Pricing is one pure function in integer cents, run identically in the browser's live preview and in the server hook that freezes a quote snapshot at submission, so a confirmation keeps what was actually quoted. Spam protection uses a honeypot and a hashed-IP rate limit, analytics are self-hosted and cookieless, and the site makes no third-party request from a page, which is why it needs no cookie banner. The social work followed the same rule: research first, then a plan and a builder that renders posts from the CMS.
Delivered on the client's v1 identity at unimeet.eu, with registrations persisted and emailed, axe-clean at 390, 768 and 1440 wide, and a sitemap-driven SEO pass with a generated share card per page. The screenshots here are the proposed v2 design system built alongside it; the client chose to keep v1 live.
— Interface evidence
The product, not a placeholder
These are the verified interface captures from the project build. Scroll inside taller frames to inspect each complete page.






— Delivery process
From operating constraint to shipped system
The work is sequenced around risk. Domain rules and failure states come before interface polish; automation arrives before handoff.
The pitch, in three identities
The proposal that won the contract was itself a page, rendered in three candidate identities from one content source, then retired once the client's designer delivered the real brand.
One content model for every fair
Tours, universities, schools and registrations in Payload; one kind discriminator and a fixed section order keep every event page standardised instead of a free-form page builder.
Pricing that can't drift
A single pricing function in integer cents, tested under a non-UTC timezone, powers the live preview and freezes a quote at submission; a forged price in a raw request is stripped before the hook runs.
Social plans and a post builder
Ten competitor accounts read, then Instagram and LinkedIn plans as pages, with a staff-only builder that renders posts from tours and fair cities in the brand's own templates.
— System architecture
Clear boundaries, explicit responsibilities
Each layer has one job and a narrow contract. That keeps external services replaceable and product behavior testable.
ebeuf 2027 / tour
4 cities · 16–20 mar
skopje · pristina · podgorica · sarajevo
registration
persisted + emailed
event engine
Next.js + Payload in one app
The admin ships with the site; pages are static and revalidated from Payload hooks.
PostgreSQL on Neon, EU region
Every schema change goes through a reviewed migration.
lib/pricing.ts
One pure function for the live preview and the frozen server quote, in integer cents.
lib/social on lib/og
Slides rendered server-side as the file to post, so the preview and the download can't differ.
— What shipped
Product capabilities
A standardised event engine
A new fair tour is a record, not a design job: the same sections, in the same order, ending in the same registration form.
A quote frozen at submission
Tour prices can change later; a confirmation always shows the price the university was actually quoted.
No cookie banner needed
Self-hosted fonts, cookieless analytics through a same-origin path, and no third-party request from any page.
— Engineering pressure
Challenges resolved
The client kept v1
A richer v2 design system was built page by page as isolated routes, so nothing on the live site changed while it was reviewed; the client chose to stay on v1, and v2 remains a proposal.
Dates a day early
Payload stores dates as UTC midnight; formatting them in local time printed every fair a day early on any host west of UTC, so every stored date is now formatted in UTC and the tests run in São Paulo time.
An email that could hang a registration
Nodemailer's default timeouts would have let an unreachable mail server hold a registration open for minutes; explicit timeouts keep the submission fast and record the email as failed instead.
verified project destinations
next transmission
Need a system this deliberate?
Bring the operating problem. We will shape it into a clear product brief and a buildable next step.
Start a project