blessed_moon@studio
studio: Blessed Moon Studio
founder: Benito Pedro Xavier · Solo studio
discipline: Strategy · Design · Engineering
stack: Next.js · Tailwind · WebGL
scene: ASCII moon · 5 keyframes
type: Space Grotesk / JetBrains Mono
accent: #ff6a1f
sound: muted
status: ready
B / S / MCASE_10 / 26

— Case study 10

UniMeet

University fairs sold through one standardised event page, plus the social plan that fills them

All work
unimeet.capture● verified
UniMeet home in the proposed v2 design: a recruitment hero beside the next fair tour card (proposal; v1 is live)

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
The problem01

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.

The approach02

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.

The result03

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.

UniMeet home in the proposed v2 design, next fair tour beside the hero (proposal; v1 is live)01 / 06
UniMeet home in the proposed v2 design, next fair tour beside the hero (proposal; v1 is live)
The EBEUF 2027 fair tour page in the proposed v2 design: four cities, dates and per-city stand prices (proposal)02 / 06
The EBEUF 2027 fair tour page in the proposed v2 design: four cities, dates and per-city stand prices (proposal)
University fairs index in the proposed v2 design, filterable by country and season (proposal)03 / 06
University fairs index in the proposed v2 design, filterable by country and season (proposal)
For Universities page in the proposed v2 design (proposal)04 / 06
For Universities page in the proposed v2 design (proposal)
UniMeet's Instagram plan page: research, strategy and the first posts, rendered from the CMS05 / 06
UniMeet's Instagram plan page: research, strategy and the first posts, rendered from the CMS
UniMeet's LinkedIn plan page: the buyer-side companion to the Instagram plan06 / 06
UniMeet's LinkedIn plan page: the buyer-side companion to the Instagram plan

— 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.

01

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.

02

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.

03

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.

04

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.

Next.jsPayload CMSPostgreSQLTypeScriptTailwind CSS v4TanStack QueryPlaywright
unimeet.sys● online

ebeuf 2027 / tour

4 cities · 16–20 mar

skopje · pristina · podgorica · sarajevo

registration

persisted + emailed

●quote in integer cents

event engine

tour record[x]
fixed sections[x]
live quote[x]
quote frozen[x]
cookie banner[ ]
one record, one standard page
App

Next.js + Payload in one app

The admin ships with the site; pages are static and revalidated from Payload hooks.

Data

PostgreSQL on Neon, EU region

Every schema change goes through a reviewed migration.

Money path

lib/pricing.ts

One pure function for the live preview and the frozen server quote, in integer cents.

Social

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

01

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.

02

A quote frozen at submission

Tour prices can change later; a confirmation always shows the price the university was actually quoted.

03

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

01

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.

02

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.

03

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.

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