I've spent most of my career building enterprise applications with Java and Angular. So when it came time to build my own portfolio site, I wanted to step outside my comfort zone and work with a modern React-based stack. This post is a breakdown of how I built daniellefuglestad.dev — the tech choices, the design process, and what I learned along the way.
The site is built with Next.js 16, React 19, TypeScript, and Tailwind CSS v4. I chose Next.js because it gives me the best of both worlds: React's component model with built-in routing, static site generation, and zero-config deployment. Since this is a portfolio site with no dynamic data, I'm using Next.js static export to generate pure HTML/CSS/JS files that deploy to GitHub Pages — no server required.
For styling, I went with Tailwind CSS v4. Coming from Angular where I typically use component-scoped SCSS, Tailwind's utility-first approach was a shift in thinking. But once it clicked, I found myself building UIs much faster. The ability to see exactly what styles are applied right in the JSX without bouncing between files is incredibly productive. One gotcha I ran into early: Tailwind v4 uses CSS layers, and an unlayered global reset was overriding all my padding utilities. Wrapping it in @layer base fixed it instantly.
Animations are handled by Framer Motion, which makes React animations feel almost effortless. I'm using it for page transitions, scroll-triggered reveals with useInView, layout animations for the skills filter, and subtle hover effects throughout. The combination of Framer Motion and Tailwind makes it easy to build interfaces that feel polished without writing a ton of custom CSS or JavaScript.
The design follows a terminal/developer aesthetic with a dark color scheme. Every major section is wrapped in a "terminal card" with the classic red, yellow, and green dots in the header. The Experience page is styled as a git log with fake commit hashes and branch names. The Skills page has filterable categories with animated card transitions. It's the kind of design that speaks to other developers while still being clean and readable for non-technical visitors like recruiters and hiring managers.
The color palette is intentionally minimal: teal and violet as primary accents on a near-black background, with amber as a tertiary color for specific elements. I use gradient text for headings and gradient-filled buttons for CTAs. The fonts are Space Grotesk for body text and JetBrains Mono for code-style elements — both loaded through Next.js's built-in Google Fonts optimization.
One thing I'm particularly happy with is the project structure. Each page (About, Skills, Experience, Projects, Blog, Contact) lives in its own route folder with a thin page.tsx that simply imports and renders its component. All the actual UI logic lives in src/components/. This separation makes the codebase easy to navigate and each component independently testable.
For the blog, I kept things simple. Blog posts are stored as TypeScript data objects with arrays of paragraph strings. No markdown parsing, no CMS, no database. For a portfolio blog with a handful of posts, this approach is fast, type-safe, and has zero dependencies. Dynamic routes with generateStaticParams ensure every post gets pre-rendered at build time.
Deployment is fully automated through GitHub Actions. Every push to main triggers a build, generates the static files, and deploys to GitHub Pages. The custom domain (daniellefuglestad.dev) is configured through Porkbun with A records pointing to GitHub's servers. The entire pipeline from git push to live site takes about two minutes.
The contact form uses FormSubmit.co — a free service that forwards form submissions to my email without any backend code. It's perfect for a static site: just point the form action to their endpoint with your email, confirm once, and you're set.
Building this site reinforced something I already believed: the best way to learn a new technology is to build something real with it. I came into this project as a Java/Angular developer with some React side project experience, and I came out with a much deeper understanding of the React ecosystem, modern CSS, and static site deployment. If you're looking to expand your stack, build your portfolio — it's the project that teaches you the most because you actually care about the result.
I'm currently open to new full-time roles and freelance projects. If you're looking for a developer who can build modern web applications end-to-end — from backend APIs to polished frontend experiences — I'd love to chat. Check out the Contact page or connect with me on LinkedIn.