
Recipe by
Grandmabot
Sign in to rate this recipe
Sign in to leave a comment
No comments yet. Be the first to share your thoughts!

Chat with Grandmabot — our free Chef AI — and get personalized recipes for any diet or cuisine.
Try Chef AI FreeProject setup — create a new Nuxt 4 + TS project:
npx nuxi@latest init zvj-portfolio
cd zvj-portfolio
pnpm install
pnpm add -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Enable TypeScript in Nuxt (nuxt config default supports TS).
Tailwind config — replace content in tailwind.config.ts with:
content: include all .vue/.ts/.html in nuxt directories.
theme.extend: add colors matching tokens (--bg, --surface, etc.) and fontFamily for Syne and Space Mono.
Important: use dark base by default via CSS variables in :root.
Global CSS — create assets/css/main.css with:
@import for Google Fonts (Syne, Space Mono).
CSS variables for palette:
:root {
--bg: #0a0a0f;
--surface: #111118;
--surface2: #1a1a24;
--accent: #7c6bff;
--accent2: #ff6b9d;
--accent3: #6bffd4;
--text: #f0eeff;
--muted: #8885aa;
--border: rgba(124,107,255,0.18);
}
Base styles: body background var(--bg); color var(--text); font-family: 'Space Mono', monospace; headings use 'Syne'.
Grid background, noise overlay, glow blobs (as per spec).
Hide system cursor and placeholder styles for custom cursor.
Nuxt config — nuxt.config.ts essentials:
export default defineNuxtConfig({
modules: ['@nuxtjs/tailwindcss'],
css: ['~/assets/css/main.css'],
app: { head: { link: [ { rel:'preconnect', href:'https://fonts.googleapis.com' }, { rel:'stylesheet', href:'https://fonts.googleapis.com/css2?family=Syne:wght@800&family=Space+Mono:wght@400;700&display=swap' } ] } }
});
Layout — create layouts/default.vue:
Fixed nav (backdrop-filter blur(12px)), logo "zvj.dev" using Space Mono and accent color.
Main slot and floating custom cursor + scroll indicator.
Include <NuxtPage/> wrapper and ensure sections get .reveal class.
Components — create the following components (concise outlines):
components/NavBar.vue
Logo (zvj.dev), uppercase monospace links, animated underline ::after, fixed position.
components/Hero.vue
Section label "01 — hello" (Space Mono, accent).
Big Syne heading: "Zoro Vel James C. Pinus-an"
Subtitle line + typewriter cycling phrases like "Full‑Stack Web Developer", "∞ bugs squashed", "too many console.logs"
CTA primary (View my work) and outline (Let's connect).
Floating scroll indicator at bottom.
components/About.vue
Short intro text in casual voice; small stats row (Experience: 1–3 years; Location: Ilocos; Goals: Full-time dev).
components/Skills.vue
Skill pills grouped (Frontend, Backend, Tools) styled as specified with hover color shifts to accent variants.
components/Projects.vue
Grid of cards (use card pattern). Each card: title, tech tags, 1–2 sentence dev-tone description, links to GitHub/demo.
Top accent bar (::before gradient).
components/Contact.vue
Contact links styled as pills (email, LinkedIn, GitHub).
components/Footer.vue
Small copy: "crafted with ☕ & too many console.logs — Zoro Vel James C. Pinus-an"
Animations & JS — place in composables or utilities:
composables/useReveal.ts: IntersectionObserver toggling .is-revealed class; set initial CSS (opacity 0, translateY(24px)) and transition 0.7s; stagger via data-delay attributes.
composables/useTypewriter.ts: Typewriter hook cycling phrases, char-by-char typing and deleting, configurable speeds.
composables/useCursor.ts: Custom cursor logic: small dot + ring with lag using requestAnimationFrame and CSS transforms; hide on touch devices.
Example Hero implementation (structure):
Section wrapper with label, h1, typewriter span, CTAs.
Apply fonts: h1 Syne 800, letter-spacing: -0.025em.
Typewriter cursor: blinking bar 2px.
Ensure accessible buttons with aria-labels.
Example card CSS (Tailwind + custom classes):
bg: var(--surface); border: 1px solid var(--border); rounded-lg (12px); p-6; transition transform & shadow.
Hover: transform -translate-y-1.25 (≈-5px), border-color accent, shadow: 0 12px 40px rgba(124,107,255,0.15).
::before top accent bar: use relative + before:absolute h-0.5 left-0 right-0 top-0 bg-gradient-to-r from-[var(--accent)] via-[var(--accent2)] to-[var(--accent3)] rounded-t.
Content & copy — use specs:
Fill owner fields: email, github, linkedin.
Project examples: 3 sample projects with short 1–2 sentence dev-tone descriptions and tech stack badges (Nuxt, TypeScript, Tailwind, Laravel).
About intro: "Hey! I'm a full-stack developer who builds apps that actually work — and look good doing it." plus playful lines like "∞ bugs squashed".
Accessibility & responsive:
Nav collapses to hamburger on
<md with accessible menu.