<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: thaumatin</title>
    <description>The latest articles on DEV Community by thaumatin (@quodline).</description>
    <link>https://dev.to/quodline</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F415043%2F83092979-1e50-4c60-9a2c-aa7dcfb03b18.jpeg</url>
      <title>DEV Community: thaumatin</title>
      <link>https://dev.to/quodline</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quodline"/>
    <language>en</language>
    <item>
      <title>Finding Where You Left Off: Building Animu for the Anime Community</title>
      <dc:creator>thaumatin</dc:creator>
      <pubDate>Mon, 02 Mar 2026 05:58:35 +0000</pubDate>
      <link>https://dev.to/quodline/finding-where-you-left-off-building-animu-for-the-anime-community-2kji</link>
      <guid>https://dev.to/quodline/finding-where-you-left-off-building-animu-for-the-anime-community-2kji</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;I built this for the anime community. Anime fans often face a specific problem: managing long-running shows. When a series like &lt;em&gt;Bleach&lt;/em&gt; or &lt;em&gt;My Hero Academia&lt;/em&gt; takes a long break, or when a viewer simply falls behind, it is hard to remember exactly where they stopped watching. It is also difficult to figure out if a show is worth continuing. Past solutions mostly involve reading through long lists of episode summaries or asking questions on forums like Reddit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I created &lt;strong&gt;Animu&lt;/strong&gt;, a web app designed to solve two big problems for returning or new anime viewers.&lt;/p&gt;

&lt;p&gt;First, the app has a cross-season &lt;strong&gt;Arc Search&lt;/strong&gt;. A user might only remember that they stopped watching around the time "Killua met Biski." They can type that phrase into the search bar. The app pulls data for the entire anime franchise and ranks the episodes by relevance. This helps them find the exact episode they need.&lt;/p&gt;

&lt;p&gt;Second, the app includes a &lt;strong&gt;Sentiment Map&lt;/strong&gt;. This feature uses AI to read the synopsis of every episode in a series and grades the emotional tone. The app then graphs these scores over the course of the show. If a viewer wants to know if an anime stays lighthearted or eventually turns dark, they can see the overall emotional arc at a glance before they decide to start watching.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;You can try it live here: &lt;a href="https://www.animu.net" rel="noopener noreferrer"&gt;https://animu.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5s8rel582lmvnwd4ca48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5s8rel582lmvnwd4ca48.png" alt="Arc search"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ow7thm6f06tmzw7cr3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ow7thm6f06tmzw7cr3n.png" alt="Sentiment Map"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is completely open source:&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ore-codes" rel="noopener noreferrer"&gt;
        ore-codes
      &lt;/a&gt; / &lt;a href="https://github.com/ore-codes/animu" rel="noopener noreferrer"&gt;
        animu
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Animu&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Animu is an open-source web application built for the anime community to solve the problem of managing and exploring long-running shows.&lt;/p&gt;
&lt;p&gt;You can try it live here: &lt;a href="https://animu.net" rel="nofollow noopener noreferrer"&gt;https://animu.net&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Arc Search (Franchise-Wide)&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;When an anime takes a long break or you fall behind, it is hard to remember exactly where you stopped watching. Searching for specific events across hundreds of episodes is painful.&lt;/p&gt;
&lt;p&gt;Animu allows you to search for vague plot points (e.g., "Killua met Biski"). The &lt;strong&gt;Arc Search&lt;/strong&gt; pulls data for the entire anime franchise automatically—crawling related seasons, prequels, and sequels—and ranks the episodes by relevance to help you find the exact episode you need.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Sentiment Map&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;It is often difficult to figure out if a new show is worth continuing or if its tone matches what you want to watch.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Sentiment Map&lt;/strong&gt; feature uses AI to read the synopsis of every episode in a series and…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ore-codes/animu" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The frontend uses React and TypeScript with Tailwind CSS for styling. The application is hosted on Vercel.&lt;/p&gt;

&lt;p&gt;For the data side, the app relies on two different APIs. It queries the &lt;strong&gt;Jikan API&lt;/strong&gt; to build the franchise tree and find all related seasons. It then merges that information with the &lt;strong&gt;Kitsu API&lt;/strong&gt; to get the episode synopses. Because Jikan separates every season into a different ID, I wrote a recursive search function that crawls the relations endpoint to group the whole show together.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Sentiment Map&lt;/strong&gt; and the fallback &lt;strong&gt;Deep Search&lt;/strong&gt; use the Google Gemini API (gemini-2.5-flash). To keep the API keys secure, I moved these calls off the client. I built a Vercel Serverless proxy backend to handle the requests. The frontend uses the Recharts library to draw the mood graph in the browser.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I Redesigned My Portfolio with Google Gemini (and Where the AI Actually Let Me Down)</title>
      <dc:creator>thaumatin</dc:creator>
      <pubDate>Sun, 01 Mar 2026 00:36:32 +0000</pubDate>
      <link>https://dev.to/quodline/how-i-redesigned-my-portfolio-with-google-gemini-and-where-the-ai-actually-let-me-down-1chg</link>
      <guid>https://dev.to/quodline/how-i-redesigned-my-portfolio-with-google-gemini-and-where-the-ai-actually-let-me-down-1chg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;A few months ago I entered DEV's New Year, New You Portfolio Challenge and decided to rebuild my portfolio from scratch. The brief: use Google AI's tools, deploy to Cloud Run, make it yours.&lt;/p&gt;

&lt;p&gt;The result is "Brutalist/Industrial" (&lt;a href="https://dev.to/quodline/brutalist-industrial-creative-developer-portfolio-2fbl"&gt;original submission post&lt;/a&gt;). The aesthetic intentionally rejects the clean, white-space-heavy look that most developer portfolios default to. Exposed grids, heavy typography with the SCHABO typeface, cursor-reactive background cells, a mathematically generated DNA helix that assembles and deconstructs as you scroll. The whole thing runs on Astro with React islands, GSAP for animations, and OGL (a lightweight WebGL library) for a metaballs footer effect.&lt;/p&gt;

&lt;p&gt;The most interesting part, at least for this challenge, was the Gemini integration I shipped as actual product features rather than just development tooling:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pitch Generator:&lt;/strong&gt; paste any job description into it, and it pulls from a structured knowledge base of my work to generate a tailored pitch explaining why I'm a fit. Not a boilerplate cover letter, a specific one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interactive Assistant:&lt;/strong&gt; a terminal-style interface that answers questions about my stack and recommends relevant projects based on what the visitor is looking for. It uses RAG with my portfolio data as the knowledge base, served through Google Genkit with Zod-validated flows and server-side rendering via Astro's Node adapter.&lt;/p&gt;

&lt;p&gt;Both features run on Gemini 2.5 Flash. I wanted to demonstrate that AI in a portfolio doesn't have to mean a chatbot that says "Hi! I'm Ore's assistant." It can be a tool that does something useful for the person looking at your work.&lt;/p&gt;

&lt;p&gt;I also used Google Antigravity as my primary AI coding pair throughout the build, and Nano Banana Pro to generate and iterate on imagery to match the industrial art direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ore.codes" rel="noopener noreferrer"&gt;https://ore.codes&lt;/a&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://portfolio-947306688997.europe-west1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Google Antigravity handled things I would have spent hours on otherwise: refactoring the original Codegrid template (raw HTML/CSS/JS with a sci-fi theme) into Astro and React components, writing the sine wave math for the DNA helix, catching performance regressions in the WebGL loop.&lt;/p&gt;

&lt;p&gt;On the engineering side, it was often genuinely good. Give it a clear, bounded problem ("make this GSAP ScrollTrigger reversible on scroll-up") and it would produce something workable on the first or second attempt.&lt;/p&gt;

&lt;p&gt;The design side was a different story, and this was the biggest surprise.&lt;/p&gt;

&lt;p&gt;What I didn't anticipate was how little the AI could help with actual creative direction. I had a clear concept (Industrial/Brutalist, raw, engineering-first) but when I tried to use it to develop the visual language, I kept getting suggestions that were technically fine and aesthetically inert. Gradient proposals that belonged on a SaaS landing page. Color palettes that were "safe." Layout ideas that could have come from any template.&lt;/p&gt;

&lt;p&gt;The AI wasn't wrong. It just had no sense of what I was going for, and no amount of prompting about "brutalism" or "industrial aesthetic" closed that gap. I ended up doing all the design decision-making myself and using the AI to execute those decisions, not to arrive at them.&lt;/p&gt;

&lt;p&gt;The real skill I walked away with is knowing which problems to hand off and which to hold. Bounded, well-specified engineering problems: hand off. Open-ended creative decisions that require taste: hold.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9w0wb96eq15lqjqcbzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9w0wb96eq15lqjqcbzb.png" alt="DNA section while scrolling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;p&gt;My biggest gripe isn't dramatic. No hallucinated APIs, no rate limit crises. The problem was subtler: outputs were consistently competent and consistently generic until I provided so much direction that I might as well have specified the answer in the prompt.&lt;/p&gt;

&lt;p&gt;For the Pitch Generator, early iterations produced pitches that were accurate but read like they were assembled from a template. "Ore is a skilled full-stack engineer with experience in X, Y, and Z..." Fine. Forgettable. I spent a lot of time refining the system prompt and knowledge base schema to push the outputs toward something that actually sounded like how I'd pitch myself in a real conversation.&lt;/p&gt;

&lt;p&gt;What worked well was the Genkit integration. The type-safe flows with Zod schemas made it straightforward to build production-ready AI features without treating the model as a black box. Server-side rendering through Astro's Node adapter kept API keys secure without any awkward workarounds. That part of the experience was genuinely smooth.&lt;/p&gt;

&lt;p&gt;The lesson on the friction side: Gemini rewards precision. Vague prompts produce vague results. When I described exactly what I wanted (the tone, the structure, specific things to emphasize) the quality went up meaningfully. But that precision requires you to already know what good looks like, which means the model can't substitute for taste, only for execution once the taste is established.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45hqy9ujtql5zfncjpxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45hqy9ujtql5zfncjpxi.png" alt="AI features"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The portfolio is staying live and I plan to keep building on the AI features. The Pitch Generator currently takes a job description and outputs a pitch; I want to add a follow-up mode where the visitor can ask it to emphasize particular aspects of my background, making it more of a back-and-forth tool than a one-shot output.&lt;/p&gt;

&lt;p&gt;The Interactive Assistant's knowledge base is static right now, a JSON structure I maintain manually. I want to connect it to a proper database so I can update it as I ship new projects without redeploying.&lt;/p&gt;

&lt;p&gt;I'm also looking at adding project search using embeddings instead of keyword matching, so someone can describe what they're trying to build and get back relevant work from my portfolio rather than having to browse everything.&lt;/p&gt;

&lt;p&gt;The DNA helix math, the Genkit integration, the Cloud Run deployment pipeline: all of it benefited from AI assistance. The decision to build an industrial portfolio that looks nothing like other portfolios? That one was mine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdw5g0zz01p64mw83zse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdw5g0zz01p64mw83zse.png" alt="Website's font in light mode"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
    <item>
      <title>First of its kind: Online checkers multiplayer app</title>
      <dc:creator>thaumatin</dc:creator>
      <pubDate>Wed, 11 Feb 2026 00:46:37 +0000</pubDate>
      <link>https://dev.to/quodline/first-of-its-kind-online-checkers-multiplayer-app-2pd5</link>
      <guid>https://dev.to/quodline/first-of-its-kind-online-checkers-multiplayer-app-2pd5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Draughts Pro&lt;/strong&gt; is more than just a checkers app; it’s a tribute to the global popularity of the game. Built with inclusivity at its core, the platform brings internationalization to the forefront, allowing players from different regions to play by their own rules and in their own language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🌍 &lt;strong&gt;Truly International:&lt;/strong&gt; Support for 7 languages and 4 major game variants (International, American/British, Brazilian, and Nigerian).&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Adaptive AI:&lt;/strong&gt; Four unique difficulty levels designed to challenge everyone from casual players to seasoned strategists.&lt;/li&gt;
&lt;li&gt;⚔️ &lt;strong&gt;Remote Multiplayer:&lt;/strong&gt; Challenge friends globally with real-time gameplay.&lt;/li&gt;
&lt;li&gt;🕹️ &lt;strong&gt;Immersive UX:&lt;/strong&gt; High-fidelity sound effects (with toggle support) and full keyboard action support for a seamless, distraction-free experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;The game is live at: &lt;a href="https://draughts.pro" rel="noopener noreferrer"&gt;https://draughts.pro&lt;/a&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://www.draughts.pro/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;draughts.pro&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayzyktppqd0o8dqr7fbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayzyktppqd0o8dqr7fbs.png" alt="Main menu screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;As someone with a strong full-stack background but limited Python and FastAPI experience, &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; became my indispensable coding partner throughout this project. It transformed what could have been weeks of documentation diving into a focused, productive build sprint.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Copilot Accelerated Development
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Bridging the Knowledge Gap&lt;/strong&gt;&lt;br&gt;
The CLI helped me rapidly understand Pythonic patterns I wasn't familiar with. When implementing board state management, I could ask directly in my terminal: "How do I validate complex nested game state using Pydantic?" Instead of parsing through documentation, I got targeted examples that I could immediately apply and iterate on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Staying in Flow&lt;/strong&gt;&lt;br&gt;
Context-switching kills productivity. Rather than bouncing between my IDE, browser tabs, and Stack Overflow, I kept my hands on the keyboard. Questions like "How do I handle WebSocket room management in FastAPI?" got instant, actionable answers without breaking my concentration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Rapid Prototyping with Confidence&lt;/strong&gt;&lt;br&gt;
The CLI was instrumental for brainstorming complex game logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforcing variant-specific rules (different capture mechanics for International vs. American rules)&lt;/li&gt;
&lt;li&gt;Implementing the AI difficulty levels with appropriate minimax depth&lt;/li&gt;
&lt;li&gt;Managing real-time state synchronization across multiplayer sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I appreciated most was Copilot's transparency. It explained &lt;em&gt;what&lt;/em&gt; changes it was making and &lt;em&gt;why&lt;/em&gt;, which turned every interaction into a learning opportunity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Permission Prompts on Sensitive Operations&lt;/strong&gt;&lt;br&gt;
Copilot always asked for permission before executing commands like starting the FastAPI server or installing packages. While this added a safety layer, I learned to anticipate which operations would trigger prompts and plan accordingly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt Engineering Strategy&lt;/strong&gt;&lt;br&gt;
Early on, I tried cramming too many requirements into single prompts, which sometimes confused the model and introduced errors. I adapted by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaking complex features into smaller, focused requests&lt;/li&gt;
&lt;li&gt;Being more specific about the context (e.g., "for the Brazilian draughts variant" vs. just "update rules")&lt;/li&gt;
&lt;li&gt;Iterating in steps rather than expecting perfect code in one shot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Balancing AI Assistance with Learning&lt;/strong&gt;&lt;br&gt;
I initially leaned heavily on Copilot for code generation, but realized I learned more by using it as a &lt;strong&gt;mentor&lt;/strong&gt; rather than a ghostwriter. Asking "explain this approach" or "what are alternatives to this pattern?" gave me deeper understanding than just accepting suggestions.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Verdict
&lt;/h3&gt;

&lt;p&gt;GitHub Copilot CLI didn't just help me build &lt;strong&gt;Draughts Pro&lt;/strong&gt;. It expanded my capabilities as a developer. I built a production-ready FastAPI backend despite minimal prior experience with the framework, and learned Pydantic, WebSockets, and async Python patterns along the way.&lt;/p&gt;

&lt;p&gt;For future projects, I'm planning to use Copilot more strategically: as a research assistant for unfamiliar domains, a sounding board for architectural decisions, and a real-time documentation lookup while keeping the creative problem-solving and critical decisions in my own hands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would I recommend it?&lt;/strong&gt; Absolutely. Whether you're exploring new tech stacks or deepening expertise in familiar ones, GitHub Copilot CLI is a force multiplier that keeps you building instead of searching.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React (State management for complex board positions and UI/UX).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python) for high-performance game logic and API endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time:&lt;/strong&gt; WebSockets for multiplayer synchronization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cjn5a6c448ehkfl1w78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cjn5a6c448ehkfl1w78.png" alt="Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1oy79bu34vqw4k0an90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1oy79bu34vqw4k0an90.png" alt="Game play"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4x3voff0exr4a1mye5y8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4x3voff0exr4a1mye5y8.png" alt="Game over"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are interesting in the Repository and Demo, check out the links below!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Repository: &lt;a href="https://github.com/ore-codes/draughts" rel="noopener noreferrer"&gt;https://github.com/ore-codes/draughts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo Site: &lt;a href="https://draughts.pro" rel="noopener noreferrer"&gt;https://draughts.pro&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Any questions or comments? I would love to hear from you!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Brutalist / Industrial: Creative Developer Portfolio</title>
      <dc:creator>thaumatin</dc:creator>
      <pubDate>Tue, 27 Jan 2026 22:39:12 +0000</pubDate>
      <link>https://dev.to/quodline/brutalist-industrial-creative-developer-portfolio-2fbl</link>
      <guid>https://dev.to/quodline/brutalist-industrial-creative-developer-portfolio-2fbl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I am Ore Adeleye (also known as thaumatin), a Full Stack Engineer and Creative Technologist based in Nigeria.&lt;/p&gt;

&lt;p&gt;Using code as a medium for creative exploration, I specialize in architecting systems that are not only resilient in logic but also fluid in presentation. My work sits at the intersection of technical performance and immersive design, treating every codebase as a living environment waiting to be optimized and explored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://portfolio-947306688997.europe-west1.run.app" rel="noopener noreferrer"&gt;https://portfolio-947306688997.europe-west1.run.app&lt;/a&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://portfolio-947306688997.europe-west1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;For this portfolio, I wanted to create a digital representation of my "Core Philosophy": that technical decisions directly shape creative outcomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Astro&lt;/strong&gt;: Chosen for its incredible performance and "island architecture," ensuring the site loads instantly while still supporting rich interactivity.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;React&lt;/strong&gt;: Used for managing complex UI state specifically where needed.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Google Genkit&lt;/strong&gt;: Powers the AI features with type-safe flows, enabling production-ready integration of Gemini 2.5 Flash for the Pitch Generator and Interactive Assistant.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;GSAP (GreenSock Animation Platform)&lt;/strong&gt;: The engine behind the fluid motion, scroll-triggered reveals, and the complex DNA sequence animation.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;OGL&lt;/strong&gt;: A minimal WebGL library used for high-performance visual effects that don't weigh down the browser.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Lenis&lt;/strong&gt;: For that buttery smooth scrolling experience that ties the whole narrative together.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Design Decisions
&lt;/h3&gt;

&lt;p&gt;The technical backbone of this site is based on a template by &lt;a href="https://x.com/codegridweb" rel="noopener noreferrer"&gt;&lt;strong&gt;Codegrid&lt;/strong&gt;&lt;/a&gt;, originally designed with a futuristic space exploration theme. &lt;/p&gt;

&lt;p&gt;My goal was to completely overhaul the art direction, pivoting from "Sci-Fi" to &lt;strong&gt;Industrial/Brutalist&lt;/strong&gt;. I stripped away the space motifs and rebuilt the aesthetic to reflect a raw, engineering-first mindset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google AI Tools
&lt;/h3&gt;

&lt;p&gt;This entire portfolio was a deep collaboration with Google's AI ecosystem. I operated as the Creative Director, while the AI tools acted as my production studio and engineering team.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Nano Banana Pro&lt;/strong&gt;: I used this to generate and edit almost all the imagery on the site. It allowed me to rapidly iterate on the visual assets to match my new art direction.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Google Antigravity&lt;/strong&gt;: My primary AI pair programmer. Antigravity was instrumental throughout the development process, helping me:

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Refactor the Core&lt;/strong&gt;: Modifying the raw HTML, CSS, JS from the original template to Astro/React components to support my new features.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Generate Complex Logic&lt;/strong&gt;: Writing the mathematical logic for the DNA helix animation and ensuring it was responsive.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Debug &amp;amp; Optimize&lt;/strong&gt;: Identifying performance bottlenecks in the WebGL and animation loops.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Gemini &amp;amp; Antigravity (Brainstorming)&lt;/strong&gt;: Before writing a single line of code, I used these models to brainstorm the "Industrial/Brutalist" concept.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  AI-Powered Features
&lt;/h3&gt;

&lt;p&gt;Beyond using AI as a development tool, I integrated &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; directly into the portfolio as live, interactive features on the "Works" page:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pitch Generator&lt;/strong&gt;: A tool that takes any job description and generates a personalized pitch highlighting why I'm the perfect fit. It analyzes the requirements and matches them against my skills, projects, and technical background in real-time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interactive Assistant&lt;/strong&gt;: An interactive terminal-style assistant that answers questions about my expertise and recommends relevant projects based on specific tech stacks or requirements. It uses RAG (Retrieval-Augmented Generation) with a structured knowledge base of my portfolio data.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;p&gt;I am most proud of how I balanced high-fidelity visuals with raw performance. By using Astro's island architecture, I was able to deliver a site that feels like a heavy, high-end WebGL experience but loads with the speed of a static HTML page.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Interactive Background Grid&lt;/strong&gt;:&lt;br&gt;
Instead of a simple image, I built a logic-driven grid system that calculates the exact number of 60px blocks needed to fill the viewport and uses a distance-based algorithm (&lt;code&gt;Math.sqrt&lt;/code&gt;) to trigger highlight "clusters" around the cursor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Electric Card Borders&lt;/strong&gt;:&lt;br&gt;
I avoided heavy image assets for the UI borders. Instead, I used complex CSS &lt;code&gt;clip-path&lt;/code&gt; polygons and &lt;code&gt;linear-gradient&lt;/code&gt; hacks to create "electric," industrial-style framing for the cards. This delivers a sharp, resolution-independent aesthetic that scales perfectly on any device.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fluid Typography &amp;amp; Motion&lt;/strong&gt;:&lt;br&gt;
Typography is the layout. I used the &lt;strong&gt;SCHABO&lt;/strong&gt; typeface and aggressive CSS &lt;code&gt;clamp()&lt;/code&gt; functions to ensure headings scale mathematically with the viewport. This is paired with GSAP &lt;code&gt;SplitText&lt;/code&gt; animations that trigger character-by-character reveals, making the text feel alive.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdw5g0zz01p64mw83zse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdw5g0zz01p64mw83zse.png" alt="Website's font in light mode"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DNA Synthesis Section&lt;/strong&gt;:&lt;br&gt;
A centerpiece of the "Profile" page. It's not a video or GIF, but a mathematically generated SVG code. I used JavaScript to calculate sine waves for the strands and animate them with GSAP ScrollTrigger. The animations are fully reversible: scrolling down assembles the helix, while scrolling up deconstructs it, creating a seamless playback loop.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9w0wb96eq15lqjqcbzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9w0wb96eq15lqjqcbzb.png" alt="DNA section while scrolling"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Footer OGL Animation&lt;/strong&gt;:&lt;br&gt;
For the footer, I integrated &lt;strong&gt;OGL&lt;/strong&gt; (a minimal WebGL library) to create a "Metaballs" effect. It adds a subtle, organic liquid motion to the bottom of the page, contrasting the rigid grid structure above without the heavy overhead of Three.js.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Polished Micro-interactions&lt;/strong&gt;:&lt;br&gt;
Every interaction was audited for "feel." &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Lenis Scroll&lt;/strong&gt;: Implemented for that heavy, inertial scrolling feel.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Magnetic Buttons&lt;/strong&gt;: Hover effects that use &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; pseudo-elements to animate borders and lines, responding physically to user intent.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Mobile Optimizations&lt;/strong&gt;: Custom logic to disable complex scroll triggers on mobile and replace them with performant, touch-friendly slide transitions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Production-Ready AI Integration&lt;/strong&gt;:&lt;br&gt;
Rather than just using AI during development, I built AI directly into the portfolio as production features. The &lt;strong&gt;Pitch Generator&lt;/strong&gt; and &lt;strong&gt;Interactive Assistant&lt;/strong&gt; run on &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; via &lt;strong&gt;Google Genkit&lt;/strong&gt;, demonstrating real-world AI integration with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Type-safe flows&lt;/strong&gt; with Zod schemas for input/output validation&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Server-side rendering&lt;/strong&gt; using Astro's Node adapter for secure API key handling&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;RAG implementation&lt;/strong&gt; with a structured knowledge base for accurate, context-aware responses&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Markdown rendering&lt;/strong&gt; for rich, formatted AI outputs in a terminal-style interface
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45hqy9ujtql5zfncjpxi.png" alt="AI features"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comprehensive Light/Dark Theme System&lt;/strong&gt;:&lt;br&gt;
Built a fully adaptive theme system with smooth View Transitions API cross-fades, theme-aware component styling with optimal contrast, dynamic CSS variable resolution in animations, page-specific color overrides, and persistent localStorage state with system preference fallback.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This portfolio represents a ceiling-break for me, proving that "Brutalist" doesn't have to mean "boring," and "High-Performance" doesn't have to mean "clunky."&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
