Files
gabrielkaszewski-next/docs/superpowers/plans/2026-05-04-movie-corner.md

5.9 KiB

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:

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:

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
npx tsc --noEmit

Expected: no errors.

  • Step 3: Commit
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
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">
              &ldquo;I&apos;d only give one piece of advice to anyone marrying.
              We&apos;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.&rdquo;
            </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
npx tsc --noEmit

Expected: no errors.

  • Step 3: Verify dev server renders the page
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

git add app/movie-corner/page.tsx
git commit -m "feat: add movie-corner page with cinematic hero and embedded reviews"