PRO

Monogram Morph Page

A single-viewport portfolio home where the wordmark is liquid. The mark is HTML text run through a goo filter, a gaussian blur followed by a steep alpha threshold, so crowding the letters fuses them into one blob and spreading them tears that blob into droplets which snap back into glyphs. One effect carries the whole site: on load a monogram melts and spreads into the full wordmark, and on every route change the current word melts and resolves into the next one, the swap hidden inside the mass while it is fully liquid. The mark is built as two passes of the same word through two goo filters: behind, a fat same-colour stroke that becomes the bright smear; in front, the letterforms themselves, solid and set light, sitting inside it. Each filter repaints its thresholded silhouette with a flat flood, because a gaussian blur works on premultiplied alpha and boosting alpha alone leaves the colour channels part-way to transparent. Around it, all running text is pre-split to characters and faded on a baked GSAP CustomBounce curve with a randomised stagger, so text does not fade, it flickers out and stutters back in. The bottom bar blends in exclusion and inverts, staying legible as the yellow mark passes beneath it, its active pill fills on a 1.2 second ease while its own letters flicker, and the landing route scatters draggable tags along the edges of the mark with collision rejection. Set in PangeaAfrikan where licensed, falling back to Hanken Grotesk, the one free grotesque sharing its binocular double-storey g. Live clock, container-query layout, GSAP only.

Page
Install
npx shadcn@latest add https://ui.aryank.space/r/monogram-morph-page.json

Installs from ui.aryank.space. To add it by hand, copy the files in Usage below, or register the @compronents namespace via the docs.

Files

API
PropTypeDefaultDescription
monogramstring"B"Mark the loader melts from, before it spreads into the landing route's word.
routesMonogramMorphRoute[]Home, Projects, ArchiveNav pills across the bottom. Each carries an id, a label, and the word the goo layer resolves to while it is active. The first route is the landing route and is the one that renders tags instead of rows.
initialRoutestringfirst route idRoute to open on. The loader always morphs the monogram into this route's word.
loaderHold / skipLoadernumber / boolean1 / falseSeconds the monogram holds before melting, and an escape hatch that opens straight on the resolved wordmark with the text already placed.
coordinates / timeZonestring / string"51.5072°N 0.1276°W" / visitorThe mono line above the nav and the IANA zone the clock reads in. Leaving timeZone unset uses the visitor's own.
practiceLabel / practicestring / string[]"Practice:" / five linesLabel and list filling the left column of the header.
aboutLabel / aboutstring / string"About" / studio copyItalic serif label and the copy under it in the centre column.
contactLabel / contact / emailstring / string[] / string"Contact" / two lines / [email protected]Right column. Lines print above a mail link built from email.
tagsMonogramMorphTag[]five tagsDashed chips scattered over the mark on the landing route. Placement is random along the top and bottom edges of their box, rejecting any slot that overlaps one already taken, and each chip is draggable afterwards.
projects / archiveMonogramMorphEntry[]five rows eachRows listed on the second and third routes. Each carries a title, a kind, and a year.
primaryLinks / secondaryLinksMonogramMorphLink[]BE, DRI, Linkedin / IG, FBThe two link clusters in the bottom bar, set uppercase in the nav's blended layer.
Customize
monogramtext

The mark the loader melts from. Keep it to one or two characters: it has to read as a single blob before it spreads.

coordinatestext

Mono line above the nav, printed opposite the live clock.

abouttext

Centre column copy, balanced to a narrow measure.

loaderHoldtext

Seconds the monogram sits before it melts. The source holds for one second; drop it for a snappier demo.

Dependencies
gsap