docs: movie-corner implementation plan
This commit is contained in:
199
docs/superpowers/plans/2026-05-04-movie-corner.md
Normal file
199
docs/superpowers/plans/2026-05-04-movie-corner.md
Normal file
@@ -0,0 +1,199 @@
|
||||
# Movie Corner Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Add a `/movie-corner` page with a cinematic hero section and a full-height iframe embedding the external movie reviews site.
|
||||
|
||||
**Architecture:** Two-task implementation — navbar link first, then the page itself. The page is a single static component: a fixed-height hero section followed by an iframe that grows to fill all remaining viewport height via flexbox.
|
||||
|
||||
**Tech Stack:** Next.js 15 (App Router), Tailwind CSS v4, TypeScript
|
||||
|
||||
---
|
||||
|
||||
## File Map
|
||||
|
||||
| File | Action | Responsibility |
|
||||
|---|---|---|
|
||||
| `components/navbar.tsx` | Modify | Add "Movie Corner" nav link |
|
||||
| `app/movie-corner/page.tsx` | Create | Full page: metadata + hero + iframe |
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Add "Movie Corner" to the navbar
|
||||
|
||||
**Files:**
|
||||
- Modify: `components/navbar.tsx`
|
||||
|
||||
The `navLinks` array currently has: Home, K-Suite, Projects, Blog, About. Insert Movie Corner between Projects and Blog.
|
||||
|
||||
- [ ] **Step 1: Edit `components/navbar.tsx`**
|
||||
|
||||
Find this block:
|
||||
|
||||
```ts
|
||||
const navLinks = [
|
||||
{ href: "/", label: "Home" },
|
||||
{ href: "/k-suite", label: "K-Suite" },
|
||||
{ href: "/projects", label: "Projects" },
|
||||
{
|
||||
href: "https://blog.gabrielkaszewski.dev/",
|
||||
label: "Blog",
|
||||
external: true,
|
||||
},
|
||||
{ href: "/about", label: "About" },
|
||||
];
|
||||
```
|
||||
|
||||
Replace with:
|
||||
|
||||
```ts
|
||||
const navLinks = [
|
||||
{ href: "/", label: "Home" },
|
||||
{ href: "/k-suite", label: "K-Suite" },
|
||||
{ href: "/projects", label: "Projects" },
|
||||
{ href: "/movie-corner", label: "Movie Corner" },
|
||||
{
|
||||
href: "https://blog.gabrielkaszewski.dev/",
|
||||
label: "Blog",
|
||||
external: true,
|
||||
},
|
||||
{ href: "/about", label: "About" },
|
||||
];
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Type-check**
|
||||
|
||||
```bash
|
||||
npx tsc --noEmit
|
||||
```
|
||||
|
||||
Expected: no errors.
|
||||
|
||||
- [ ] **Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add components/navbar.tsx
|
||||
git commit -m "feat: add Movie Corner to navbar"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Create the Movie Corner page
|
||||
|
||||
**Files:**
|
||||
- Create: `app/movie-corner/page.tsx`
|
||||
|
||||
The page is a `min-h-screen flex flex-col` container with `pt-20 gravity-body` (matching all other pages). The hero takes its natural height; the iframe section has `flex-1` so it fills the rest.
|
||||
|
||||
- [ ] **Step 1: Create `app/movie-corner/page.tsx`**
|
||||
|
||||
```tsx
|
||||
import { Metadata } from "next";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Movie Corner | Gabriel Kaszewski",
|
||||
description:
|
||||
"My personal cinema journal — what I watch and how I feel about it.",
|
||||
};
|
||||
|
||||
const MOVIE_REVIEWS_URL =
|
||||
"https://movies.gabrielkaszewski.dev/users/5d253151-0f6a-4246-9bc5-cb0b5869731b";
|
||||
|
||||
const genres = ["Sci-Fi", "Drama", "Family"];
|
||||
|
||||
export default function MovieCornerPage() {
|
||||
return (
|
||||
<div className="min-h-screen flex flex-col pt-20 gravity-body">
|
||||
<section className="py-12 px-4 text-center relative">
|
||||
<div className="absolute inset-0 flex justify-center pointer-events-none">
|
||||
<div className="w-64 h-32 bg-yellow-400/10 blur-3xl rounded-full mt-4" />
|
||||
</div>
|
||||
|
||||
<div className="relative">
|
||||
<div className="text-5xl mb-4">🎬</div>
|
||||
|
||||
<h1 className="text-4xl md:text-6xl font-bold tracking-widest text-yellow-400 uppercase mb-3">
|
||||
Movie Corner
|
||||
</h1>
|
||||
|
||||
<p className="text-white/60 text-base md:text-lg mb-8">
|
||||
What I watch, what I think. A personal cinema journal.
|
||||
</p>
|
||||
|
||||
<blockquote className="border-l-2 border-yellow-400/50 bg-white/5 backdrop-blur-sm rounded-r-lg px-6 py-4 max-w-xl mx-auto text-left mb-8">
|
||||
<p className="text-white/80 text-sm italic leading-relaxed mb-2">
|
||||
“I'd only give one piece of advice to anyone marrying.
|
||||
We're all quite similar in the end. We all get old and tell
|
||||
the same tales too many times. But try and marry someone
|
||||
kind.”
|
||||
</p>
|
||||
<cite className="text-yellow-400/70 text-xs not-italic">
|
||||
— About Time, 2013
|
||||
</cite>
|
||||
</blockquote>
|
||||
|
||||
<div className="flex justify-center gap-3 flex-wrap">
|
||||
{genres.map((genre, i) => (
|
||||
<span
|
||||
key={genre}
|
||||
className={`px-4 py-1.5 rounded-full text-sm border ${
|
||||
i === 0
|
||||
? "bg-yellow-400/10 border-yellow-400/40 text-yellow-400"
|
||||
: "bg-white/5 border-white/15 text-white/70"
|
||||
}`}
|
||||
>
|
||||
{genre}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="flex-1 flex flex-col border-t border-white/10 min-h-0">
|
||||
<iframe
|
||||
src={MOVIE_REVIEWS_URL}
|
||||
title="Gabriel's Movie Reviews"
|
||||
className="flex-1 w-full min-h-0"
|
||||
/>
|
||||
<div className="py-3 text-center">
|
||||
<a
|
||||
href={MOVIE_REVIEWS_URL}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-yellow-400/70 text-xs hover:text-yellow-400 transition-colors"
|
||||
>
|
||||
Open reviews directly →
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Type-check**
|
||||
|
||||
```bash
|
||||
npx tsc --noEmit
|
||||
```
|
||||
|
||||
Expected: no errors.
|
||||
|
||||
- [ ] **Step 3: Verify dev server renders the page**
|
||||
|
||||
```bash
|
||||
bun run dev
|
||||
```
|
||||
|
||||
Open `http://localhost:3000/movie-corner`. Verify:
|
||||
- Navbar shows "Movie Corner" highlighted in yellow
|
||||
- Hero: 🎬 icon, "MOVIE CORNER" title in yellow, tagline, quote card with left yellow border, three genre chips (Sci-Fi yellow, Drama + Family glass)
|
||||
- Iframe fills remaining screen height with the movie reviews site
|
||||
- "Open reviews directly →" link visible at the bottom
|
||||
|
||||
- [ ] **Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add app/movie-corner/page.tsx
|
||||
git commit -m "feat: add movie-corner page with cinematic hero and embedded reviews"
|
||||
```
|
||||
Reference in New Issue
Block a user