# Editorial portfolio hero

> A magazine-style designer portfolio hero: giant serif headline that rises line by line, a spinning badge and an endless marquee.

- Category: Developer tools
- Version: 1.0
- Source: https://ownlyplans.com/bhaskar/editorial-portfolio-hero/

## Overview

A confident editorial look with zero images. Huge serif type reveals line by line from behind a mask, an orange italic line adds contrast, a circular badge spins and a black marquee scrolls services forever.

## Tech stack

- CSS
- HTML
- Typography

## Build steps

### 1. Paste the prompt

Paste this prompt into your AI tool. It builds everything in one go, then the steps below show what to check.

Prompt:

```text
Create a single-file HTML hero for a designer portfolio, editorial / print-magazine style. Paper #f2ede4, ink #16130f, accent vermilion #e5471b. Fonts: Georgia/serif for display, system sans for small labels (no external fonts).
Layout:
- Top bar: three uppercase letter-spaced 12px items (name "Mara Ellison", "Index · Work · About · Contact", "Available 2027") with a 1px ink bottom border.
- Meta row: "Independent designer & art director" left, "Lisbon / Remote" right.
- Giant H1 (clamp 64-230px, weight 400, line-height .86, letter-spacing -0.05em) in three lines: "Quiet", "ideas, loud" (italic, vermilion, indented 8vw), "results." Each line sits in an overflow:hidden wrapper and its text slides up from 105% with a cubic-bezier(.2,.8,.2,1) reveal, staggered .18s.
- A 150px black circle badge on the right that slowly rotates (14s linear infinite) with text "12 years of brand work".
- Two-column intro paragraph and "Recent clients" list under a 1px rule.
- A black marquee band at the bottom (italic serif 30px, paper-colored text, vermilion star separators) scrolling left forever; duplicate the content so the loop is seamless.
Responsive under 760px (single column, hide badge), reduced-motion safe. Return only the complete HTML.
```

### 2. Build the masked headline

Check: Three lines that rise from behind a clip.

### 3. Add badge, intro and marquee

Check: Rotating circle, two columns and seamless scroll.

**Done when:** You can see it working in the browser.

## Assets

### prompt.md — The full prompt.

~~~~
# Editorial portfolio hero

Copy this prompt into Claude, Cursor or Lovable.

```text
Create a single-file HTML hero for a designer portfolio, editorial / print-magazine style. Paper #f2ede4, ink #16130f, accent vermilion #e5471b. Fonts: Georgia/serif for display, system sans for small labels (no external fonts).
Layout:
- Top bar: three uppercase letter-spaced 12px items (name "Mara Ellison", "Index · Work · About · Contact", "Available 2027") with a 1px ink bottom border.
- Meta row: "Independent designer & art director" left, "Lisbon / Remote" right.
- Giant H1 (clamp 64-230px, weight 400, line-height .86, letter-spacing -0.05em) in three lines: "Quiet", "ideas, loud" (italic, vermilion, indented 8vw), "results." Each line sits in an overflow:hidden wrapper and its text slides up from 105% with a cubic-bezier(.2,.8,.2,1) reveal, staggered .18s.
- A 150px black circle badge on the right that slowly rotates (14s linear infinite) with text "12 years of brand work".
- Two-column intro paragraph and "Recent clients" list under a 1px rule.
- A black marquee band at the bottom (italic serif 30px, paper-colored text, vermilion star separators) scrolling left forever; duplicate the content so the loop is seamless.
Responsive under 760px (single column, hide badge), reduced-motion safe. Return only the complete HTML.
```
~~~~

### index.html.md — Complete code of the result in the video.

~~~~
# index.html

The finished result as one file. Save it as index.html and open it.

```html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Editorial portfolio hero</title>
<style>
*{box-sizing:border-box;margin:0}
:root{--paper:#f2ede4;--ink:#16130f;--acc:#e5471b}
body{background:var(--paper);color:var(--ink);font-family:Georgia,"Times New Roman",serif;min-height:100vh;overflow-x:hidden}
.top{display:flex;justify-content:space-between;padding:26px 40px;font:600 12px/1 ui-sans-serif,system-ui,sans-serif;letter-spacing:.18em;text-transform:uppercase;border-bottom:1px solid var(--ink);animation:in .8s both}
.hero{padding:40px 40px 0;position:relative}
.meta{display:flex;justify-content:space-between;font:500 13px ui-sans-serif,system-ui,sans-serif;margin-bottom:10px;animation:in .8s .1s both}
h1{font-weight:400;font-size:clamp(64px,15.5vw,230px);line-height:.86;letter-spacing:-.05em}
h1 .ln{display:block;overflow:hidden;padding-bottom:.06em}
h1 .ln span{display:block;transform:translateY(105%);animation:rise 1.1s cubic-bezier(.2,.8,.2,1) forwards}
h1 .ln:nth-child(2) span{animation-delay:.18s;font-style:italic;color:var(--acc);padding-left:8vw}
h1 .ln:nth-child(3) span{animation-delay:.36s}
@keyframes rise{to{transform:none}}
@keyframes in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.badge{position:absolute;right:6vw;top:46%;width:150px;height:150px;border-radius:50%;background:var(--ink);color:var(--paper);display:grid;place-items:center;font:700 12px ui-sans-serif,system-ui,sans-serif;letter-spacing:.14em;text-align:center;animation:spin 14s linear infinite,in 1s .9s both}
.badge b{font-size:34px;font-family:Georgia,serif;font-weight:400}
@keyframes spin{to{transform:rotate(360deg)}}
.bot{display:grid;grid-template-columns:1fr 1fr;gap:40px;padding:34px 40px;margin-top:26px;border-top:1px solid var(--ink);font:400 18px/1.55 ui-sans-serif,system-ui,sans-serif;animation:in .9s .8s both}
.bot b{font-family:Georgia,serif;font-size:20px}
.mq{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);overflow:hidden;white-space:nowrap;background:var(--ink);color:var(--paper)}
.mq div{display:inline-block;padding:16px 0;font:italic 30px Georgia,serif;animation:mq 22s linear infinite}
.mq span{margin:0 28px}.mq em{color:var(--acc);font-style:normal}
@keyframes mq{to{transform:translateX(-50%)}}
@media(max-width:760px){.bot{grid-template-columns:1fr}.top,.hero,.bot{padding-left:20px;padding-right:20px}.badge{display:none}}
@media(prefers-reduced-motion:reduce){*{animation:none!important}h1 .ln span{transform:none}}
</style></head><body>
<div class="top"><span>Mara Ellison</span><span>Index · Work · About · Contact</span><span>Available 2027</span></div>
<header class="hero"><div class="meta"><span>Independent designer &amp; art director</span><span>Lisbon / Remote</span></div>
<h1><span class="ln"><span>Quiet</span></span><span class="ln"><span>ideas, loud</span></span><span class="ln"><span>results.</span></span></h1>
<div class="badge"><div><b>12</b><br>YEARS OF<br>BRAND WORK</div></div></header>
<div class="bot"><p><b>Hello.</b> I help young companies look like they have always known who they are: identity, editorial systems and websites with a point of view.</p><p><b>Recent clients</b><br>Halden Press · Orbit Coffee · Fieldnote · Marlow &amp; Co.</p></div>
<div class="mq"><div><span>Brand identity</span><em>✦</em><span>Editorial design</span><em>✦</em><span>Web design</span><em>✦</em><span>Packaging</span><em>✦</em><span>Art direction</span><em>✦</em><span>Brand identity</span><em>✦</em><span>Editorial design</span><em>✦</em><span>Web design</span><em>✦</em><span>Packaging</span><em>✦</em><span>Art direction</span><em>✦</em></div></div>
</body></html>

```
~~~~


## Build instructions by tool

### Claude Code

Open a terminal in an empty folder, run `claude`, then paste the prompt.

```text
Build the "Editorial portfolio hero" app from the OwnlyPlans blueprint at https://ownlyplans.com/bhaskar/editorial-portfolio-hero/.
Stack: CSS, HTML, Typography.
Follow the plan's steps in order: Paste the prompt → Build the masked headline → Add badge, intro and marquee.
Download the full plan (Markdown) from the link above and keep it in the project root as PLAN.md.
Ask me before adding anything not in the plan. (Prepared for Claude Code.)
```

### Cursor

Open an empty folder in Cursor, start an Agent chat, then paste the prompt.

```text
Build the "Editorial portfolio hero" app from the OwnlyPlans blueprint at https://ownlyplans.com/bhaskar/editorial-portfolio-hero/.
Stack: CSS, HTML, Typography.
Follow the plan's steps in order: Paste the prompt → Build the masked headline → Add badge, intro and marquee.
Download the full plan (Markdown) from the link above and keep it in the project root as PLAN.md.
Ask me before adding anything not in the plan. (Prepared for Cursor.)
```

### Lovable

Start a new Lovable project and paste the prompt as your first message.

```text
Build the "Editorial portfolio hero" app from the OwnlyPlans blueprint at https://ownlyplans.com/bhaskar/editorial-portfolio-hero/.
Stack: CSS, HTML, Typography.
Follow the plan's steps in order: Paste the prompt → Build the masked headline → Add badge, intro and marquee.
Download the full plan (Markdown) from the link above and keep it in the project root as PLAN.md.
Ask me before adding anything not in the plan. (Prepared for Lovable.)
```

## Definition of done

- Every build step is complete and the app runs locally.
- The main user flow works end to end.
- Share your build on OwnlyPlans with a demo link, build time and tool.
