2026

Personal page

Neon rain over the Amazon

A cyberpunk personal page built during a course on AI prototyping. There was no client, metric or brief: the point was to find out how far I could get building something myself, and where the limit actually sits.

The page, as published

Neo-Manaus hero: CHRISTOFER in red neon over a dark grid, with a terminal-style status bar

A capture of the published site, running in a browser. The flicker and scanlines only exist in motion, on the live link.

In 30 seconds

The problem
Nine years designing products, and no published page where I owned every decision. Maven's AI prototyping course became the excuse to test how far I could get on my own.
What I did
I did the concept, art direction, copy and deploy of a cyberpunk page. v0 generated the first structure, and the character came from hand-tuned CSS: 224 lines, no WebGL and no animation runtime.
Where it landed
The page is live, kept separate from this portfolio on purpose. What carried back into the day job is calibration: knowing sooner when to edit what the AI generated and when to describe it again.
Context
Maven · AI Prototyping for Designers
Role
Everything
Scope
Side project
Built with
v0 · Next.js · CSS
Status
Published · 2026

01

It's live: go look before reading

This case is about a page that is live. The captures here hold the layout, but the flicker, the scanlines and the marquee only exist in motion. Open it, then come back.

homepage-christofer.vercel.app

02

Why this exists

Nine years designing products used by millions, and I had never shipped anything where I owned every decision, including the ones I wasn't qualified to make.

The course gave me the excuse. The brief I set myself was narrow on purpose: one page, one aesthetic, published. No portfolio, no product, and no stakeholders to align.

I'm the type who keeps Figma and the terminal open on the same screen. This page is what happens when nobody makes me choose.

03

What I was actually testing

  1. Question 1

    Can I direct an AI toward a specific aesthetic, or only a generic one?

    Generative tools drift toward the safe middle. Getting to retro-futurism (CRT scanlines, chromatic glow, monospace status bars) meant describing a look precisely enough that it couldn't be flattened into another gradient landing page.

  2. Question 2

    Where does prompting stop and editing start?

    v0 got the structure up fast. The character came from going into the CSS afterwards and adjusting timings, opacities and blend modes by hand. Knowing which of the two a given problem needs turned out to be the actual skill.

  3. Question 3

    Can an effect-heavy page still be readable?

    Glow, flicker and scanlines fight legibility by nature. Every effect had to be dialled back until the text won, which is the same restraint the day job demands, just with nobody else enforcing it.

Bio and photo carousel

  • Neo-Manaus mid sections: the who-I-am terminal card and the life-out-of-office photo carousel

The bio card with its corner brackets, and the auto-scrolling carousel: Manaus, Japan and Korea behind a cyan wash.

04

It's all CSS

No WebGL, no shaders, no animation runtime.

The whole aesthetic runs on layered gradients, a repeating-linear-gradient for the scanlines, text-shadow for the neon glow, and a keyframe with irregular timing for the flicker. 224 lines of CSS.

The flicker, running

// SELF.INTRODUCE( )

NEO-MANAUS

neon rain · irregular by design

The exact keyframe from the published page, with the values copied as-is. Turns off under reduced motion.

Obsessions and the way out

  • Neo-Manaus closing sections: current obsessions marquee and the contact footer

The marquee, the tag row, and a contact block that stays in character to the last line.

That was a deliberate constraint. A 3D scene would have been more impressive to describe and less honest about what the exercise was: the point was to see how far plain platform features go when pushed with intent.

The flicker keyframe is the detail I'd defend: the steps are deliberately uneven, because a regular pulse reads as a loading state and an irregular one reads as a failing tube.

05

What I cut

  • A WebGL background

    Tempting, and it would have looked the part. It also would have turned a one-page experiment into a project with a dependency budget, and made the page slower for no gain in what it was testing.

  • Sound

    The aesthetic asks for it. Autoplaying audio on a personal page is hostile, and gating it behind a button meant almost nobody would hear it. Not worth the code.

  • Making it my actual homepage

    It's the wrong front door for someone applying to senior roles abroad. It stays a side project on purpose: this portfolio is the front door, and that separation is itself the decision.

06

Who did what

Christofer

  • Concept, art direction and every word on the page
  • Prompt direction toward the aesthetic, and the calls on when to stop prompting
  • Hand-tuning of the CSS: glow curves, scanline density, flicker timing
  • Deploy and the decision to keep it separate from the portfolio

With the team

  • No team. That was the point.
  • v0 generated the first structural pass, which I then rewrote in places

07

Reflections

What carried back into the day job.

AI got me to a working page in an afternoon that would have taken me a week. It also produced, by default, exactly the generic result the course was warning about. The work now is keeping the first without accepting the second.

What transferred back to the day job is calibration rather than any technique: knowing sooner when a generated version is close enough to edit, and when it's cheaper to throw away and describe again.