<?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>Forem: Adam</title>
    <description>The latest articles on Forem by Adam (@asynchronope).</description>
    <link>https://forem.com/asynchronope</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%2F137620%2F2b14c143-b37b-4529-9340-ae52a1e13af1.jpg</url>
      <title>Forem: Adam</title>
      <link>https://forem.com/asynchronope</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/asynchronope"/>
    <language>en</language>
    <item>
      <title>QuestBoard: Turn Your Notion Workspace Into a Full RPG</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sun, 29 Mar 2026 16:35:26 +0000</pubDate>
      <link>https://forem.com/asynchronope/questboard-turn-your-notion-workspace-into-a-full-rpg-59hl</link>
      <guid>https://forem.com/asynchronope/questboard-turn-your-notion-workspace-into-a-full-rpg-59hl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;See the generated workspace:&lt;br&gt;
&lt;a href="https://www.notion.so/QuestBoard-332b84e6a27e8113b2cdc7e27063e491?source=copy_link" rel="noopener noreferrer"&gt;QuestBoard Notion&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;QuestBoard turns a Notion page into a playable RPG-style productivity system.&lt;/p&gt;

&lt;p&gt;Instead of giving you another flat task list, it creates a workspace where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real tasks become quests&lt;/li&gt;
&lt;li&gt;neglected areas become new quest targets&lt;/li&gt;
&lt;li&gt;completed work turns into XP, levels, streaks, and achievements&lt;/li&gt;
&lt;li&gt;bigger pressure points can become boss battles&lt;/li&gt;
&lt;li&gt;weekly progress becomes a recap page written like a story chapter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that this is not just themed copy pasted into Notion. QuestBoard is MCP-native from end to end. It uses Notion MCP to create the workspace, create and update records, build hosted views, sync progression, log automation runs, and support review/correction loops.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why It Is Useful
&lt;/h2&gt;

&lt;p&gt;The core problem I wanted to solve was this: most productivity systems are good at storing work, but weak at making progress &lt;em&gt;felt&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;QuestBoard tries to make motivation, pressure, and momentum visible inside a workspace people already use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weak skill areas are easier to spot&lt;/li&gt;
&lt;li&gt;small wins still feel meaningful because they award progression&lt;/li&gt;
&lt;li&gt;recurring inconsistency shows up as stale quests, not invisible drift&lt;/li&gt;
&lt;li&gt;a user can review and correct generated content instead of treating AI output as automatically trusted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also works beyond the canned showcase flow. A real user can onboard with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a real goal&lt;/li&gt;
&lt;li&gt;what success looks like&lt;/li&gt;
&lt;li&gt;a real time budget&lt;/li&gt;
&lt;li&gt;preferred pacing&lt;/li&gt;
&lt;li&gt;constraints&lt;/li&gt;
&lt;li&gt;motivation&lt;/li&gt;
&lt;li&gt;optional domain context for niche tools or jargon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That profile is saved into Notion and used to shape future quests.&lt;/p&gt;
&lt;h2&gt;
  
  
  How A User Actually Gets Value
&lt;/h2&gt;

&lt;p&gt;The real-user loop is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect hosted Notion MCP and point QuestBoard at a blank Notion page.&lt;/li&gt;
&lt;li&gt;Run guided onboarding so QuestBoard captures the user’s real goal, time budget, focus area, constraints, and motivation.&lt;/li&gt;
&lt;li&gt;QuestBoard creates the full workspace in Notion.&lt;/li&gt;
&lt;li&gt;The user works mostly in Notion: reviewing quests, moving them through status, and watching progression update.&lt;/li&gt;
&lt;li&gt;QuestBoard syncs XP, levels, streaks, skills, achievements, run logs, and review state.&lt;/li&gt;
&lt;li&gt;Weekly recaps and review workflows turn the workspace from “AI generated pages” into an operating system the user can keep using.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For ambiguous or niche goals, onboarding can optionally use Exa or Perplexity to ground the saved context before the first quests are generated.&lt;/p&gt;
&lt;h2&gt;
  
  
  What The Hosted MCP Path Creates
&lt;/h2&gt;

&lt;p&gt;On the hosted path, QuestBoard creates 8 databases and 14 named views across 8 hosted view types.&lt;/p&gt;

&lt;p&gt;Core databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Player Profile&lt;/li&gt;
&lt;li&gt;Quest Board&lt;/li&gt;
&lt;li&gt;Skill Trees&lt;/li&gt;
&lt;li&gt;Achievement Log&lt;/li&gt;
&lt;li&gt;Hero Roster&lt;/li&gt;
&lt;li&gt;Adventure Recaps&lt;/li&gt;
&lt;li&gt;Runs&lt;/li&gt;
&lt;li&gt;Review Queue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hosted views:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hero Dashboard&lt;/li&gt;
&lt;li&gt;Quest Ledger&lt;/li&gt;
&lt;li&gt;Quest Map&lt;/li&gt;
&lt;li&gt;Quest Calendar&lt;/li&gt;
&lt;li&gt;Quest Timeline&lt;/li&gt;
&lt;li&gt;Quest Cards&lt;/li&gt;
&lt;li&gt;XP Progress&lt;/li&gt;
&lt;li&gt;Skill Focus&lt;/li&gt;
&lt;li&gt;Skill Board&lt;/li&gt;
&lt;li&gt;Trophy Case&lt;/li&gt;
&lt;li&gt;Hero Roster&lt;/li&gt;
&lt;li&gt;Story Archive&lt;/li&gt;
&lt;li&gt;Run Center&lt;/li&gt;
&lt;li&gt;Review Queue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is what makes the product feel like a real Notion system instead of a terminal tool that happens to write pages.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/cL-092Qy16w"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;See the generated workspace:&lt;br&gt;
&lt;a href="https://www.notion.so/QuestBoard-332b84e6a27e8113b2cdc7e27063e491?source=copy_link" rel="noopener noreferrer"&gt;QuestBoard Notion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video focuses on the strongest hosted path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create the workspace on a blank Notion page&lt;/li&gt;
&lt;li&gt;Questboard generated views and structure&lt;/li&gt;
&lt;li&gt;Questboard do quest generation and progression&lt;/li&gt;
&lt;li&gt;QuestBoard syncs Notion changes back into the game state&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Show Us The Code
&lt;/h2&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/bO-05" rel="noopener noreferrer"&gt;
        bO-05
      &lt;/a&gt; / &lt;a href="https://github.com/bO-05/questboard" rel="noopener noreferrer"&gt;
        questboard
      &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;QuestBoard&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Turn your Notion workspace into an RPG. QuestBoard is a Python app that uses Notion MCP to create and operate a gamified workspace with quests, boss battles, skill trees, XP, recaps, runtime automation, and human review workflows.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What It Does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Creates a full QuestBoard workspace inside Notion&lt;/li&gt;
&lt;li&gt;Guides first-time setup with &lt;code&gt;questboard onboard&lt;/code&gt; so a real goal, time budget, motivation, and constraints shape the workspace&lt;/li&gt;
&lt;li&gt;Generates quests from your focus areas and skill gaps&lt;/li&gt;
&lt;li&gt;Creates boss battles for neglected skills or habits&lt;/li&gt;
&lt;li&gt;Tracks XP, leveling, streaks, and achievements&lt;/li&gt;
&lt;li&gt;Writes weekly recaps with AI or deterministic fallbacks&lt;/li&gt;
&lt;li&gt;Can optionally ground ambiguous goals with Exa or Perplexity before the first quests are generated&lt;/li&gt;
&lt;li&gt;Logs automation runs in &lt;code&gt;Runs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Routes generated output through a &lt;code&gt;Review Queue&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Supports revision loops for reviewed quests and recaps&lt;/li&gt;
&lt;li&gt;Runs a policy-based runtime loop with &lt;code&gt;questboard runtime&lt;/code&gt; and &lt;code&gt;questboard watch&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Notion MCP Integration&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;QuestBoard is MCP-native. Notion…&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/bO-05/questboard" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Key files:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/cli.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/cli.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;User-facing commands for setup, onboarding, doctor, sync, runtime, review, revision, and demo flows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/setup_workspace.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/setup_workspace.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Builds the Notion workspace, schemas, hosted views, and seed data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/mcp_client.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/mcp_client.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MCP wrapper for hosted vs self-hosted Notion operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/onboarding.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/onboarding.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Goal grounding, optional research, and context-brief generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/engines/quest_generator.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/engines/quest_generator.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Quest generation, boss generation, JSON repair, and fallback templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/engines/xp_engine.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/engines/xp_engine.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;XP, leveling, streaks, achievements, and progression reconciliation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/engines/recap_writer.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/engines/recap_writer.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Weekly recap generation and stale quest patrol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/runtime.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/runtime.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Policy-based runtime planning, watch mode, and recurring control-loop behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/operations.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/operations.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Review Queue operations and review-surface reconciliation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bO-05/questboard/blob/main/src/revision.py" rel="noopener noreferrer"&gt;&lt;code&gt;src/revision.py&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Correction-loop revision from review notes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Local validation for the release snapshot reached &lt;code&gt;130 passed&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Notion MCP
&lt;/h2&gt;

&lt;p&gt;QuestBoard is built around Notion MCP, not lightly assisted by it.&lt;/p&gt;

&lt;p&gt;Every important operation goes through MCP:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MCP capability&lt;/th&gt;
&lt;th&gt;How QuestBoard uses it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create database&lt;/td&gt;
&lt;td&gt;Builds the full multi-database workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create pages&lt;/td&gt;
&lt;td&gt;Creates quests, boss battles, recaps, player records, run logs, and review items&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update page&lt;/td&gt;
&lt;td&gt;Syncs quest status, XP, levels, streaks, and review state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create view&lt;/td&gt;
&lt;td&gt;Builds the hosted product surfaces like Quest Map, XP Progress, Hero Dashboard, Run Center, and Review Queue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Finds player, quest, skill, run, and review records across the workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fetch&lt;/td&gt;
&lt;td&gt;Reads schema and page state to drive generation, sync, and runtime decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create comment&lt;/td&gt;
&lt;td&gt;Adds progression flavor, warnings, and operational commentary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move pages&lt;/td&gt;
&lt;td&gt;Supports archival and organization flows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I also intentionally supported both hosted and self-hosted MCP paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hosted MCP is the strongest product/demo path because it can create the richer view suite&lt;/li&gt;
&lt;li&gt;self-hosted MCP is still valuable for local validation and token-based setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reliability And Hardening
&lt;/h2&gt;

&lt;p&gt;I spent a large part of the build on making the project less fragile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;questboard doctor&lt;/code&gt; provides a read-only workspace health check&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;questboard hosted-login&lt;/code&gt; makes the hosted OAuth path usable without hand-building tokens&lt;/li&gt;
&lt;li&gt;setup accepts full Notion URLs, not just raw IDs&lt;/li&gt;
&lt;li&gt;rerunning setup can repair an older saved workspace instead of blindly trusting stale local metadata&lt;/li&gt;
&lt;li&gt;QuestBoard has deterministic fallback generation when model output is malformed or unavailable&lt;/li&gt;
&lt;li&gt;generated content is reviewable, correctable, and revision-friendly through Review Queue and revision flows&lt;/li&gt;
&lt;li&gt;Run Center records operational history instead of hiding it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That matters because an MCP project should not just generate a cool first page. It should keep behaving coherently once the workspace is alive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;QuestBoard is my attempt to make Notion feel less like a storage layer and more like a playable progression system.&lt;/p&gt;

&lt;p&gt;The goal was not only to make something flashy. The goal was to make a workspace where motivation, progress, governance, and automation all become visible inside Notion itself.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built Bruno Simon's Inspired Portfolio as a 3d Web Noob, Here's My Learning Experience</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sat, 31 Jan 2026 19:42:50 +0000</pubDate>
      <link>https://forem.com/asynchronope/i-built-bruno-simons-portfolio-in-20-days-heres-my-jakarta-street-3d-experience-2ghp</link>
      <guid>https://forem.com/asynchronope/i-built-bruno-simons-portfolio-in-20-days-heres-my-jakarta-street-3d-experience-2ghp</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;Hi! I'm &lt;strong&gt;Adam&lt;/strong&gt;, a full-stack vibe-developer from Jakarta, Indonesia. I specialize in AI-powered applications and interactive experiences. But I have very little 3d web experience, if any.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The challenge I set for myself:&lt;/strong&gt; As a 3d noob, could I build a Bruno Simon-inspired 3D portfolio in under 20 days while juggling daily responsibilities? Bruno's site took him months, with years of experiences. I had January 12 → February 1, with just some AI assistant at my disposal and my own stubbornness.&lt;/p&gt;

&lt;p&gt;This portfolio represents everything I've learned from juggling with projects, iterating with AI, winning  hackathons (Auth0, Postmark, Wasp) and reaching the finals of Hack for Humanity 2025. I'm aiming more than just a gallery. Hopefully it is a playable game.&lt;/p&gt;




&lt;p&gt;Try below, currently much better when on desktop&lt;/p&gt;

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

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://jakarta-portfolio-291766337994.us-central1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;







&lt;h2&gt;
  
  
  🎮 Full Controls &amp;amp; Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic Controls
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WASD / Arrow Keys&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drive the bajaj&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Toggle engine on/off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shift&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Boost (with shake effect)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Space&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Honk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Toggle headlights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;J&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open journal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Expand/collapse minimap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Gameplay Features
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;6 Buildings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internet Cafe, Workshop, Library, House, Arcade, Warung — each houses different project categories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parking System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Park near "P" markers to enter buildings (cursor changes when parked)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;15 Collectibles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scattered around the world — 8 visible, 4 in knockable boxes, 3 hidden in bushes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;12 Achievements&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"First Steps", "Speed Demon", "Night Owl", "Explorer", "Collector", "Completionist", etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speedrun Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drive to the speedrun zone, enter your initials, race through 10 rings — your time gets submitted to the global leaderboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global Leaderboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Best speedrun times synced via Convex backend — compete globally!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Day/Night Cycle&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Based on your local time, with dynamic lighting and stars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Chat (Warung)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ask about any of my 25+ projects — Gemini knows everything&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🥚 Easter Eggs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;↑↑↓↓←→←→BA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Konami code — Bajaj transforms into TransJakarta bus!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Honk 5x quickly&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bajaj does a wheelie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visit 5 buildings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unlock different Sky texture (day: jakarta, night: aurora)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type "disco"&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disco lights mode&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;h3&gt;
  
  
  The 20-Day Journey
&lt;/h3&gt;

&lt;p&gt;This project went through &lt;strong&gt;3 build plan iterations&lt;/strong&gt; before I was satisfied. The final build plan spans 2,500+ lines of granular tasks across 8 phases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Week 1 (Jan 12-18): Foundation + Physics
Week 2 (Jan 19-25): Assets + Interactivity + Backend  
Week 3 (Jan 26-31): Polish, Easter Eggs, Optimization, Deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  My AI-Powered Workflow (Full Transparency)
&lt;/h3&gt;

&lt;p&gt;This project is supported by Google and I'm using &lt;strong&gt;Antigravity IDE&lt;/strong&gt;. Antigravity is such a blessing — I really love how it generates implementation plans and task checklists whenever we plan things. It acts as a layer between my draft ideas and real working step-by-step tasks. Antigravity-specific extension I use is called "Antigravity Cockpit" to monitor my quota.&lt;/p&gt;

&lt;p&gt;Since I already had my build plan, I mostly did one phase per session and the implementation-task system in Antigravity followed it nicely and seamlessly. I have Google AI Pro, so I use &lt;strong&gt;Claude Opus 4.5&lt;/strong&gt; and &lt;strong&gt;Gemini 3 Pro&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At the start when planning&lt;/strong&gt;, I used Perplexity to research tech stacks and make my tasks reflect real-world documentation. I kept using Perplexity in Antigravity as an MCP server until the end of the project — super useful for research tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 AI Code Review Army
&lt;/h3&gt;

&lt;p&gt;I'm abusing AI code review on this project (in a good way!) — I use a multitude of code review AIs on a single project. I didn't pay for most of them because I either got promos or they're currently free:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;How I Got It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CodeRabbit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free via DEV++ membership&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Devin Review&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Currently free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cubic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mesa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free tokens (ran out near project end 😅)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entelligence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When people see my Git history, especially my PRs, they'll see this code review AI army butchering my code and finding bugs/edge cases!&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Agent Skills I Used
&lt;/h3&gt;

&lt;p&gt;I use &lt;a href="https://skills.sh/" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt; (Vercel's Open Agent Skills Ecosystem) to extend Antigravity. Super easy to integrate — just copy the installation script to your terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://skills.sh/vercel-labs/skills/find-skills" rel="noopener noreferrer"&gt;find-skills&lt;/a&gt;&lt;/strong&gt; — Find other skills&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://skills.sh/sickn33/antigravity-awesome-skills/gcp-cloud-run" rel="noopener noreferrer"&gt;gcp-cloud-run&lt;/a&gt;&lt;/strong&gt; — Cloud Run deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://skills.sh/jezweb/claude-skills/google-gemini-api" rel="noopener noreferrer"&gt;google-gemini-api&lt;/a&gt;&lt;/strong&gt; — Gemini SDK patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://skills.sh/emalorenzo/three-agent-skills/r3f-best-practices" rel="noopener noreferrer"&gt;r3f-best-practices&lt;/a&gt;&lt;/strong&gt; — React Three Fiber optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 3D Asset Generation
&lt;/h3&gt;

&lt;p&gt;For the 3D models, I used &lt;strong&gt;FAL.ai&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hunyuan 3D-v3&lt;/strong&gt; — Text-to-3D for buildings and vehicles (LowPoly mode, 40k triangles)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imagen 4&lt;/strong&gt; — Textures (road, sky, grass)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beatoven SFX&lt;/strong&gt; — Sound effects (engine loop, honk)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Bajaj&lt;/strong&gt; and &lt;strong&gt;TransJakarta bus&lt;/strong&gt; (the Konami code easter egg vehicle!) were both generated this way.&lt;/p&gt;

&lt;h3&gt;
  
  
  💬 My Prompting Style
&lt;/h3&gt;

&lt;p&gt;When I hit complex bugs found by the code review AIs, I use this prompt pattern — making the AI act as a "senior distinguished engineer under audit":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# background 

we are on the code review of current phase. 

i do use multiple ai code review for latest PR.
they are done, and i am still not merging that PR so it is still open. and currently we are still on same last working branch if im not mistaken. 
i need u to check below regarding latest PR and change, here are some of its findings. some of it have high severity, some lower.

Check if these issues are valid — if so, understand the root cause of each and fix them. 
Again, check thoroughly (multiple times, if needed) if it is valid, if it is not valid no need to do it, if it is done no need to do again.

You must act as a senior distinguished game engineer overseeing an array of multiple senior engineers, operating under strict audit constraints of third party auditor
You are required to rigorously review, verify, and implement solutions at production quality.
All code writing and evaluations must include concrete code, gameplay systems, game physics, and overall technical architecture.
You must reason step by step with meticulous scrutiny, validate every assumption, identify risks and edge cases, and produce clear, auditable corrections and improvements.
No part of the system may be treated as implicit, optional, or assumed.

i dont care if you use librarian, oracle, or any other tool that built in in your disposal. do this job as best as you can with best understanding of everything.

we have:
- agent skills finder for finding skills if you are needing to have extra hand for searching agent skill, use it for absolute best practice of anything you need to do.
- perplexity for search web but be extra careful, please do include all context and background when asking query so they are giving the solution we literally face and not some problem that similar but has different solution. 

below findings might include few or all of the code review platform, it is each wrapped between: 
`&amp;lt;problem&amp;gt;  &amp;lt;/problem&amp;gt;` 
tag.

&amp;lt;problem&amp;gt;  

## bug 1
## bug 2
## etc

&amp;lt;/problem&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(The "librarian" and "oracle" in the prompt are from Ampcode — they have these roles in their agent. I use Ampcode because they give $10/day in their free ad-supported model, which is super useful.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I supposedly integrated &lt;strong&gt;Sentry&lt;/strong&gt; and &lt;strong&gt;PostHog&lt;/strong&gt; for this project to experiment with tracking, but currently paused. Curious to see how it performs in production and whether I should re-initialize the analytics again!&lt;/p&gt;




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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3D Engine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React Three Fiber + Drei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Physics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rapier WASM (not Cannon — better performance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zustand (client) + Convex (server)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React 19 + TypeScript + CSS Modules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Chat&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Gemini 2.0 Flash (streaming SSE)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PostHog (paused) + Sentry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Express.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Cloud Run&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;The &lt;strong&gt;Warung Chat&lt;/strong&gt; is powered by Gemini 2.0 Flash with a comprehensive system prompt containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All 25+ projects with descriptions, tech stacks, and links&lt;/li&gt;
&lt;li&gt;Developer profile, skills, awards&lt;/li&gt;
&lt;li&gt;FAQ responses for common questions&lt;/li&gt;
&lt;li&gt;Building guide for navigation
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Streaming SSE endpoint&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContentStream&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`data: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;})}&lt;/span&gt;&lt;span class="s2"&gt;\n\n`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time token streaming (ChatGPT-like)&lt;/li&gt;
&lt;li&gt;24-hour response caching&lt;/li&gt;
&lt;li&gt;Offline fallback with retry logic&lt;/li&gt;
&lt;li&gt;Rate limiting (10 req/min)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance Engineering
&lt;/h3&gt;

&lt;p&gt;The build plans have explicit &lt;strong&gt;Performance Gates&lt;/strong&gt; that must pass before each phase:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;Achieved&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mobile FPS&lt;/td&gt;
&lt;td&gt;&amp;gt;30&lt;/td&gt;
&lt;td&gt;✅ 56 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU Time&lt;/td&gt;
&lt;td&gt;&amp;lt;5ms&lt;/td&gt;
&lt;td&gt;✅ 3.1ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Time&lt;/td&gt;
&lt;td&gt;&amp;lt;10ms&lt;/td&gt;
&lt;td&gt;✅ 5.5ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Draw Calls&lt;/td&gt;
&lt;td&gt;&amp;lt;100&lt;/td&gt;
&lt;td&gt;✅ 56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle Size&lt;/td&gt;
&lt;td&gt;&amp;lt;3MB&lt;/td&gt;
&lt;td&gt;✅ 1.28MB models&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Optimizations applied:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Draco-compressed GLTF models (98.5MB → 1.28MB, 98.7% reduction)&lt;/li&gt;
&lt;li&gt;Frame-rate independent animations&lt;/li&gt;
&lt;li&gt;Lazy-loaded analytics (PostHog (paused)/Sentry defer via requestIdleCallback)&lt;/li&gt;
&lt;li&gt;Device-adaptive quality (auto-detects low-end devices)&lt;/li&gt;
&lt;li&gt;WebGL context loss recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cloud Run Deployment
&lt;/h3&gt;

&lt;p&gt;Deployed via &lt;strong&gt;source-based deployment&lt;/strong&gt; (no local Docker required):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcloud run deploy jakarta-portfolio &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--source&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-central1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--memory&lt;/span&gt; 1Gi &lt;span class="nt"&gt;--cpu&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--min-instances&lt;/span&gt; 1 &lt;span class="nt"&gt;--cpu-boost&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--set-secrets&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gemini-api-key:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--labels&lt;/span&gt; dev-tutorial&lt;span class="o"&gt;=&lt;/span&gt;devnewyear2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🔐 GCP Permissions Required&lt;/strong&gt; (for anyone replicating):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Service Account&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;storage.objectViewer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compute Engine&lt;/td&gt;
&lt;td&gt;Source access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;storage.objectAdmin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cloud Build&lt;/td&gt;
&lt;td&gt;Write access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;artifactregistry.writer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compute Engine&lt;/td&gt;
&lt;td&gt;Push images&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;logging.logWriter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compute Engine&lt;/td&gt;
&lt;td&gt;Build logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secretmanager.secretAccessor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cloud Run&lt;/td&gt;
&lt;td&gt;Gemini API key&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Cloud Run has &lt;strong&gt;no GPU&lt;/strong&gt;. All 3D rendering happens in the user's browser. Cloud Run only serves static files and handles API requests.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  🎮 It's a Real Game, Not Just a Portfolio
&lt;/h3&gt;

&lt;p&gt;Most portfolios are static pages with projects listed. This is a &lt;strong&gt;playable experience&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Physics-based driving (acceleration, braking, drift)&lt;/li&gt;
&lt;li&gt;Collectible hunting with progress tracking&lt;/li&gt;
&lt;li&gt;Achievements that unlock as you explore&lt;/li&gt;
&lt;li&gt;A global leaderboard for speedrunners&lt;/li&gt;
&lt;li&gt;Easter eggs rewarding curiosity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🇮🇩 Indonesian Cultural Context
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bajaj&lt;/strong&gt; — the iconic orange three-wheeler&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warung&lt;/strong&gt; — traditional food stall where local indonesian people gather and chit-chats (now serving AI chat)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jakarta Street&lt;/strong&gt; — the overall theme&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TransJakarta&lt;/strong&gt; — the secret easter egg vehicle&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 AI That Actually Helps
&lt;/h3&gt;

&lt;p&gt;The Warung Chat isn't a gimmick. It's the fastest way to learn about my 25+ projects. Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What are your hackathon wins?"&lt;/li&gt;
&lt;li&gt;"Tell me about Assistant Zero"&lt;/li&gt;
&lt;li&gt;"What's your tech stack?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And get instant, contextual answers with streaming responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ 20 Days, 2 Build Plans, 8 Phases
&lt;/h3&gt;

&lt;p&gt;The build plans in my repo (&lt;code&gt;dokss/portfolio-1-granular-build-plan-v3.md&lt;/code&gt; and &lt;code&gt;dokss/portfolio-1-granular-build-plan-v3-neo.md&lt;/code&gt;) document every decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why Rapier over Cannon.js for physics&lt;/li&gt;
&lt;li&gt;How to achieve &amp;lt;2s cold starts on Cloud Run&lt;/li&gt;
&lt;li&gt;Frame-rate independent animation techniques&lt;/li&gt;
&lt;li&gt;Memory leak prevention strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 Data-Driven from Day 1 -paused
&lt;/h3&gt;

&lt;p&gt;PostHog analytics supposedly were integrated (currently paused) before the first building was rendered. Every interaction is tracked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which buildings users visit&lt;/li&gt;
&lt;li&gt;How long they spend driving&lt;/li&gt;
&lt;li&gt;Which achievements unlock most&lt;/li&gt;
&lt;li&gt;FPS samples by device type&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Run URL:&lt;/strong&gt; &lt;a href="https://jakarta-portfolio-291766337994.us-central1.run.app" rel="noopener noreferrer"&gt;https://jakarta-portfolio-291766337994.us-central1.run.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://3d.asynchronope.my.id" rel="noopener noreferrer"&gt;https://3d.asynchronope.my.id&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/bO-05/3d-portfolio" rel="noopener noreferrer"&gt;https://github.com/bO-05/3d-portfolio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Plans:&lt;/strong&gt; &lt;a href="https://github.com/bO-05/3d-portfolio/blob/main/dokss/portfolio-1-granular-build-plan-v3.md" rel="noopener noreferrer"&gt;v3&lt;/a&gt; | &lt;a href="https://github.com/bO-05/3d-portfolio/blob/main/dokss/portfolio-1-granular-build-plan-v3-neo.md" rel="noopener noreferrer"&gt;v3-neo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter/X:&lt;/strong&gt; &lt;a href="https://x.com/asynchronope" rel="noopener noreferrer"&gt;https://x.com/asynchronope&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ from Jakarta, Indonesia&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Assistant0 - Secure AI Personal Assistant</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Mon, 27 Oct 2025 06:58:47 +0000</pubDate>
      <link>https://forem.com/asynchronope/assistant0-secure-ai-personal-assistant-l11</link>
      <guid>https://forem.com/asynchronope/assistant0-secure-ai-personal-assistant-l11</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/auth0-2025-10-08"&gt;Auth0 for AI Agents 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;Assistant0&lt;/strong&gt; - A secure, enterprise-grade AI assistant that helps you manage your digital life with the power of Auth0's security features.&lt;/p&gt;

&lt;p&gt;Assistant0 is not just another chatbot. It's a comprehensive AI agent system that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📧 &lt;strong&gt;Search and manage your Gmail&lt;/strong&gt; - Find emails, create drafts, and send messages&lt;/li&gt;
&lt;li&gt;📅 &lt;strong&gt;Manage your Google Calendar&lt;/strong&gt; - View events and schedule meetings&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Search the web&lt;/strong&gt; - Get real-time information using Exa AI-powered search&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;Search your documents&lt;/strong&gt; - With fine-grained access control&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;Maintain complete audit trails&lt;/strong&gt; - Every action is logged and traceable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key differentiator? &lt;strong&gt;Enterprise-grade security&lt;/strong&gt; powered by Auth0 for AI Agents, ensuring that every action your AI agent takes is properly authenticated, authorized, and auditable.&lt;/p&gt;

&lt;p&gt;Login with:&lt;br&gt;
acc:&lt;br&gt;
&lt;a href="mailto:replacementadapter@gmail.com"&gt;replacementadapter@gmail.com&lt;/a&gt;&lt;br&gt;
pass: &lt;br&gt;
1212diGital01#884516&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🔗 Live Demo:&lt;/strong&gt; &lt;a href="https://assistant0agent.vercel.app" rel="noopener noreferrer"&gt;https://assistant0agent.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📦 GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/bO-05/assistantzero" rel="noopener noreferrer"&gt;https://github.com/bO-05/assistantzero&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&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%2Ftkqhrc5dxjfk6dullbvu.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%2Ftkqhrc5dxjfk6dullbvu.png" alt="Assistant0 Homepage" width="800" height="449"&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%2Ftt3qtjf4z3ie6sk704rm.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%2Ftt3qtjf4z3ie6sk704rm.png" alt="Chat interface" width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Clean, intuitive chat interface powered by Mistral AI&lt;/em&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%2Fw8gkiorw6ihg2gyjthlt.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%2Fw8gkiorw6ihg2gyjthlt.png" alt="Mission Control - Audit Dashboard" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Complete visibility into all agent actions with risk scoring and approval status&lt;/em&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%2Fmbu6454bcfr7gjkhnywj.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%2Fmbu6454bcfr7gjkhnywj.png" alt="Workspace" width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Organize your work with isolated workspaces and FGA-based permissions&lt;/em&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%2Fxonsmeb7mb8a7zt81yzf.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%2Fxonsmeb7mb8a7zt81yzf.png" alt="Users" width="800" height="449"&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%2Fzbcyo6l0xi40wau123jr.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%2Fzbcyo6l0xi40wau123jr.png" alt="Aplications" width="800" height="449"&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%2Frr8om8dmg0jj4pfg0ecl.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%2Frr8om8dmg0jj4pfg0ecl.png" alt="APIs" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Used Auth0 for AI Agents
&lt;/h2&gt;

&lt;p&gt;Assistant0 leverages the &lt;strong&gt;full spectrum&lt;/strong&gt; of Auth0's AI agent security features:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. 🔐 Token Vault for Federated API Access
&lt;/h3&gt;

&lt;p&gt;The Token Vault is the backbone of Assistant0's Google integration. When users ask the AI to read emails or create calendar events, Auth0 securely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stores OAuth refresh tokens&lt;/li&gt;
&lt;li&gt;Exchanges them for access tokens on-demand&lt;/li&gt;
&lt;li&gt;Handles token refresh automatically&lt;/li&gt;
&lt;li&gt;Creates user-friendly authorization flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withGoogleConnection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;auth0AI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;withTokenVault&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google-oauth2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scopes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.googleapis.com/auth/gmail.readonly&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.googleapis.com/auth/gmail.compose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.googleapis.com/auth/calendar.events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;refreshToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;getRefreshToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;credentialsContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tool-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the AI agent needs to access Gmail or Calendar on behalf of the user, it seamlessly prompts for authorization with a clean UI component, then securely accesses the API.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 🛡️ Fine-Grained Authorization (FGA) with Okta FGA
&lt;/h3&gt;

&lt;p&gt;Assistant0 implements &lt;strong&gt;document-level access control&lt;/strong&gt; using Okta FGA. Users can upload documents to their workspace, and the AI agent only retrieves documents they have permission to view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;retriever&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FGAFilter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;buildQuery&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DocumentWithScore&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`user:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;object&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`doc:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;relation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;can_view&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// AI only sees documents user can access&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;authorizedDocs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;retriever&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures that in multi-user workspaces, the AI agent respects organizational hierarchies and access policies.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ⚡ Client Initiated Backchannel Authentication (CIBA)
&lt;/h3&gt;

&lt;p&gt;For high-risk operations like online purchases, Assistant0 implements &lt;strong&gt;async authorization&lt;/strong&gt; using CIBA. When the AI agent attempts to buy something, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sends an authorization request to the user's device&lt;/li&gt;
&lt;li&gt;Displays the transaction details ("Do you want to buy 2 iPhone for $2000?")&lt;/li&gt;
&lt;li&gt;Waits for user approval&lt;/li&gt;
&lt;li&gt;Only proceeds after explicit confirmation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withAsyncAuthorization&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;auth0AI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;withAsyncAuthorization&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;())?.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;bindingMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;qty&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class="s2"&gt;`Do you want to buy &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scopes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;openid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product:buy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;onAuthorizationRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authReq&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;creds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Non-blocking: user can approve from mobile device&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;creds&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents unauthorized purchases even if someone gains access to the chat interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 📊 Comprehensive Audit Logging
&lt;/h3&gt;

&lt;p&gt;Every AI agent action is logged to the &lt;strong&gt;Mission Control&lt;/strong&gt; dashboard with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full Auth0 user context (user ID, email, session)&lt;/li&gt;
&lt;li&gt;Tool name and agent role (communication-agent, scheduler-agent, etc.)&lt;/li&gt;
&lt;li&gt;Input/output data&lt;/li&gt;
&lt;li&gt;Risk assessment scores&lt;/li&gt;
&lt;li&gt;Success/failure status&lt;/li&gt;
&lt;li&gt;Duration metrics&lt;/li&gt;
&lt;li&gt;Approval requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This provides complete &lt;strong&gt;provenance and traceability&lt;/strong&gt; - critical for enterprise compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. 🎯 Risk-Based Step-Up Authentication
&lt;/h3&gt;

&lt;p&gt;Assistant0 implements &lt;strong&gt;adaptive security&lt;/strong&gt; with risk scoring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low-risk actions (searching emails, reading calendar): Seamless execution&lt;/li&gt;
&lt;li&gt;Medium-risk actions (creating calendar events): Standard authorization&lt;/li&gt;
&lt;li&gt;High-risk actions (sending emails, making purchases): Step-up authentication required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system can be extended to trigger Auth0 Guardian for MFA when risk thresholds are exceeded.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. 🔒 Secure Session Management
&lt;/h3&gt;

&lt;p&gt;All routes are protected with Auth0 Next.js SDK middleware, ensuring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server-side session validation&lt;/li&gt;
&lt;li&gt;Automatic token refresh&lt;/li&gt;
&lt;li&gt;Secure cookie handling&lt;/li&gt;
&lt;li&gt;Protection against CSRF and XSS attacks&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js 15.2, React 19, TailwindCSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Mistral AI (via AI SDK), LangChain Community Tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; Auth0 for AI Agents (@auth0/ai-vercel 4.0.1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; PostgreSQL with Drizzle ORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorization:&lt;/strong&gt; Okta FGA for fine-grained access control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned and Takeaways
&lt;/h2&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Token Vault Interrupts vs Errors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Initially, token authorization failures were returning as errors instead of interrupts, preventing the UI from showing authorization buttons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Discovered that &lt;code&gt;getAccessTokenFromTokenVault()&lt;/code&gt; is synchronous, not async! Removing &lt;code&gt;await&lt;/code&gt; fixed the interrupt flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson:&lt;/strong&gt; Read SDK documentation carefully - async/sync semantics matter!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database State vs Real-Time Interrupts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Old error messages persisted in the database prevented new authorization flows from triggering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Implemented smart history loading that detects TokenVault errors and auto-clears the conversation for fresh auth attempts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson:&lt;/strong&gt; Stateful systems need reconciliation logic between persisted data and real-time state.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;LangChain vs Direct SDK Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Gmail tools use LangChain wrappers expecting &lt;code&gt;() =&amp;gt; Promise&amp;lt;string&amp;gt;&lt;/code&gt; for access tokens, but Auth0 SDK provides sync access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Wrapped the sync token getter in an async function for LangChain compatibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson:&lt;/strong&gt; Bridge patterns are essential when integrating multiple SDKs with different conventions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Audit Logging Without Breaking Interrupts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Wrapping tools with audit logic could catch and suppress Auth0 interrupts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Explicit interrupt detection by error name and re-throwing to preserve the interrupt flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson:&lt;/strong&gt; Middleware must be interrupt-aware in AI agent architectures.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key Insights
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;🎯 AI Agents Need Special Security Models&lt;/strong&gt;&lt;br&gt;
Traditional web auth isn't enough. AI agents act autonomously, access multiple services, and handle sensitive data. Auth0's specialized features (Token Vault, CIBA, FGA) are purpose-built for this new paradigm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📝 Auditability is Non-Negotiable&lt;/strong&gt;&lt;br&gt;
In production, you MUST know what your AI agent did, when, why, and with whose permission. Mission Control-style audit dashboards aren't optional - they're table stakes for enterprise AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 Progressive Security Works&lt;/strong&gt;&lt;br&gt;
Not every action needs Guardian MFA. Risk-based authentication provides the right balance: seamless UX for safe actions, step-up auth for risky ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Auth0 SDK Makes Complex Auth Simple&lt;/strong&gt;&lt;br&gt;
Implementing CIBA, Token Vault, and FGA from scratch would take months. Auth0's AI SDK reduces it to configuration and a few wrapper functions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advice for Other Developers
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with Auth Early&lt;/strong&gt; - Don't bolt on security later. Design your agent architecture around Auth0's primitives from day one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test the Unhappy Paths&lt;/strong&gt; - Authorization failures, expired tokens, denied requests - these are where most bugs hide. Test them thoroughly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build Audit Logging First&lt;/strong&gt; - You can't debug what you can't see. Mission Control saved me hours of debugging by showing exactly what the agent was doing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use TypeScript&lt;/strong&gt; - The Auth0 AI SDK has excellent types. They caught dozens of bugs during development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Read the Vercel AI SDK Docs&lt;/strong&gt; - Auth0's AI SDK builds on top of Vercel AI SDK. Understanding both is crucial.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's Next for Assistant0
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Agent Orchestration:&lt;/strong&gt; Specialized agents (email agent, calendar agent) collaborating on complex tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Interface:&lt;/strong&gt; Speak to your AI assistant with secure voice biometrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile App:&lt;/strong&gt; iOS/Android apps with native Auth0 Guardian integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Features:&lt;/strong&gt; SSO, custom branding, admin controls for organizations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More Integrations:&lt;/strong&gt; Slack, Microsoft 365, Notion, Linear, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repo: &lt;code&gt;git clone https://github.com/bO-05/assistantzero&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set up Auth0 credentials in &lt;code&gt;.env.local&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configure Google OAuth social connection with offline_access&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm install &amp;amp;&amp;amp; npm run dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Chat with your secure AI assistant!&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Built with ❤️ for the Auth0 AI Agents Challenge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Special thanks to the Auth0 team for creating such a comprehensive SDK for AI agent security. This challenge pushed me to explore the cutting edge of AI authentication, and I learned more in two weeks than I have in months of regular development.&lt;/p&gt;

&lt;h1&gt;
  
  
  Auth0Challenge #AIAgents #NextJS #SecureAI
&lt;/h1&gt;




&lt;p&gt;&lt;em&gt;I built this in about 2 days, so maybe still much needed touchup!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>auth0challenge</category>
      <category>ai</category>
      <category>authentication</category>
    </item>
    <item>
      <title>SpiritDex: An Explorer's Journal</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sun, 14 Sep 2025 09:22:57 +0000</pubDate>
      <link>https://forem.com/asynchronope/spiritdex-an-explorers-journal-43l6</link>
      <guid>https://forem.com/asynchronope/spiritdex-an-explorers-journal-43l6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-ai-studio-2025-09-03"&gt;Google AI Studio Multimodal Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;SpiritDex&lt;/strong&gt;, an explorer's journal that transforms the entire world into a canvas for discovery. It's a web application where users can explore any real-world location on a map, scan for spiritual energy, and discover unique AI-generated "spirits."&lt;/p&gt;

&lt;p&gt;Each spirit is procedurally generated by the Gemini API, with its name, lore, appearance, and stats inspired by the genuine history, folklore, and mythology of the chosen location. This creates an endlessly replayable and deeply personal collection experience. You aren't just collecting monsters; you're uncovering the hidden stories of places, given form and life by AI.&lt;/p&gt;

&lt;p&gt;The app solves the problem of generic content in collection games by grounding every single creation in authentic, verifiable real-world lore, making each discovery feel meaningful and unique to the player's journey.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/kurJZBbINvo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try the applet live here:&lt;/strong&gt; &lt;a href="https://spiritdex-25956270103.us-west1.run.app/" rel="noopener noreferrer"&gt;https://spiritdex-25956270103.us-west1.run.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a walkthrough of the core user journey:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore &amp;amp; Discover:&lt;/strong&gt; The user finds a location on the map, like the Tower of London, and scans for spirits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Uncover an Echo:&lt;/strong&gt; A mysterious clue and a hazy image appear, hinting at a spirit of a specific rarity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reveal &amp;amp; Collect:&lt;/strong&gt; The user spends energy to reveal the spirit. Gemini generates its full lore, stats, and a unique portrait. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create a Personal Encounter:&lt;/strong&gt; The user can then take a photo and use the "Create Encounter" feature. The AI seamlessly edits the spirit into their photo, creating a personal, shareable memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build Your Journal:&lt;/strong&gt; Every spirit is added to the user's journal and deck, where they can read its history, add personal notes, and even chat with it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How I Used Google AI Studio
&lt;/h2&gt;

&lt;p&gt;Google AI Studio was instrumental for prototyping and refining the complex, multi-step prompts that power SpiritDex. I heavily relied on it to test different model configurations and system instructions to achieve the desired tone and data structure.&lt;/p&gt;

&lt;p&gt;The app is built entirely on the capabilities of the Gemini API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;gemini-2.5-flash&lt;/code&gt;&lt;/strong&gt;: This is the workhorse of the app. It handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Grounded Research:&lt;/strong&gt; Using the &lt;code&gt;googleSearch&lt;/code&gt; tool to find authentic historical and mythological context for locations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Structured Data Generation:&lt;/strong&gt; Creating the core &lt;code&gt;SpiritData&lt;/code&gt; JSON object with a strict schema (&lt;code&gt;responseSchema&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Creative Writing:&lt;/strong&gt; Generating cryptic clues, lore, and dynamic journal entries.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Conversational AI:&lt;/strong&gt; Powering the "Commune" feature, where it role-plays as the spirit using a detailed system prompt.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;imagen-4.0-generate-001&lt;/code&gt;&lt;/strong&gt;: This model is responsible for giving the spirits visual form. It generates the primary spirit portraits and the artistic "journal illustrations" based on detailed textual descriptions created by &lt;code&gt;gemini-2.5-flash&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;gemini-2.5-flash-image-preview&lt;/code&gt;&lt;/strong&gt;: This powerful image editing model is the magic behind the "Create Encounter" feature, allowing for sophisticated image-and-text-to-image generation.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multimodal Features
&lt;/h2&gt;

&lt;p&gt;SpiritDex is built from the ground up on multimodality, weaving different models and inputs together to create an immersive experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Grounded Spirit Generation (Search + Text-to-JSON)
&lt;/h3&gt;

&lt;p&gt;This is the core of the app. Instead of just asking the AI to "make up a spirit," I use a two-step process to ensure quality and authenticity:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Research:&lt;/strong&gt; First, &lt;code&gt;gemini-2.5-flash&lt;/code&gt; is prompted to use the Google Search tool to find a &lt;em&gt;specific, compelling piece of lore or history&lt;/em&gt; about a location.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Generation:&lt;/strong&gt; The findings from that search are then fed as context into a &lt;em&gt;second&lt;/em&gt; prompt. This prompt instructs the model to create a spirit directly based on that context, outputting the result as a clean JSON object using &lt;code&gt;responseSchema&lt;/code&gt;.
This combination of web grounding and structured data generation ensures every spirit feels like a real, researched legend, not just a random creation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Visual Manifestation (Text-to-Image)
&lt;/h3&gt;

&lt;p&gt;Once a spirit's data (including a detailed visual description) is generated, that description is passed to &lt;code&gt;imagen-4.0-generate-001&lt;/code&gt;. The prompt is specifically engineered to produce a "found footage" aesthetic (harsh flash, high ISO noise, motion blur), making the spirits feel more mysterious and grounded, as if they were captured by an amateur explorer. This directly translates the AI's textual idea into a compelling visual.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Personal Encounters (Image + Text-to-Image)
&lt;/h3&gt;

&lt;p&gt;This is my favorite feature. A user uploads their own photo and selects a spirit. The app then sends the user's image along with a detailed text prompt to &lt;code&gt;gemini-2.5-flash-image-preview&lt;/code&gt;. This prompt instructs the model to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Place the spirit into the user's environment.&lt;/li&gt;
&lt;li&gt;  Generate a new background and outfit for the user that matches the spirit's lore and location.&lt;/li&gt;
&lt;li&gt;  Apply the "found footage" style to the entire image for a cohesive look.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a brand new, composite image that looks like a genuine snapshot of a supernatural encounter, providing a deeply personal and shareable piece of content that connects the user directly to their discovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Location Scouting (Image-to-Text)
&lt;/h3&gt;

&lt;p&gt;To enhance the exploration fantasy, users can upload a photo of a landmark. The app uses &lt;code&gt;gemini-2.5-flash&lt;/code&gt;'s vision capabilities to analyze the image, identify the location, and provide its name (e.g., "Eiffel Tower, Paris, France"). This text output is then used to automatically search for that location on the map, providing a fun, alternative way to begin the discovery process.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Ultimate List of 25+ Essential Startup Credits</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sat, 02 Aug 2025 12:25:59 +0000</pubDate>
      <link>https://forem.com/asynchronope/ultimate-list-of-25-essential-startup-credits-2elm</link>
      <guid>https://forem.com/asynchronope/ultimate-list-of-25-essential-startup-credits-2elm</guid>
      <description>&lt;p&gt;The other day, I was catching up with a friend who's deep in the startup grind. He was venting about something lots of folks felt: "Why isn't there just &lt;em&gt;one place&lt;/em&gt; to find all the startup credit programs? It's a mess of partner pages, outdated blogs, and half-remembered tweets."&lt;/p&gt;

&lt;p&gt;He was 100% right. That conversation lit a fire under me. I decided to build the resource we were looking for. Initially, this was just for my own reference. I want to make a master list to save my sanity for future projects. But it felt selfish to keep it locked away.&lt;/p&gt;

&lt;p&gt;So, this guide is my personal documentation, shared with all of you. My hope is that it saves you countless hours and, more importantly, helps you extend that precious runway.&lt;/p&gt;

&lt;p&gt;Because building a startup is a race against time and money. Your runway is your lifeblood. Every dollar you don't spend on operational overhead is another dollar you can invest in product, engineering, and growth.&lt;/p&gt;

&lt;p&gt;That's where startup credit programs come in. These aren't just small discounts; they are massive injections of non-dilutive capital. Tech giants are fighting to become the foundation of your stack, and they're willing to give you tens or even hundreds of thousands of dollars in free services to win you over.&lt;/p&gt;

&lt;p&gt;This guide is your playbook. I've compiled a comprehensive directory of the best programs available in 2025 and broken down the strategy you need to stack them, time them, and maximize their value. Let's dive in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Master Directory: The At-a-Glance List
&lt;/h2&gt;

&lt;p&gt;Bookmark this. Here’s a quick-reference table of the best startup deals out there.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Program Name&lt;/th&gt;
&lt;th&gt;Core Offering (Value &amp;amp; Type)&lt;/th&gt;
&lt;th&gt;Key Eligibility Criteria&lt;/th&gt;
&lt;th&gt;Direct Link to Program&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;Cloud &amp;amp; Infrastructure&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;Cloudflare for Startups&lt;/td&gt;
&lt;td&gt;Up to $250,000 in credits&lt;/td&gt;
&lt;td&gt;Funded up to Series B; partner affiliation for higher tiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.cloudflare.com/forstartups/" rel="noopener noreferrer"&gt;https://www.cloudflare.com/forstartups/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon Web Services&lt;/td&gt;
&lt;td&gt;AWS Activate&lt;/td&gt;
&lt;td&gt;Up to $100,000 in cloud credits&lt;/td&gt;
&lt;td&gt;All stages; partner affiliation often required for higher tiers&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/activate/" rel="noopener noreferrer"&gt;https://aws.amazon.com/activate/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;Microsoft for Startups Founders Hub&lt;/td&gt;
&lt;td&gt;Up to $150,000 in Azure credits + software bundle&lt;/td&gt;
&lt;td&gt;All stages; investor referral for highest tier&lt;/td&gt;
&lt;td&gt;&lt;a href="https://portal.startups.microsoft.com/" rel="noopener noreferrer"&gt;https://portal.startups.microsoft.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Cloud&lt;/td&gt;
&lt;td&gt;Google for Startups Cloud Program&lt;/td&gt;
&lt;td&gt;Up to $350,000 in credits (for AI startups)&lt;/td&gt;
&lt;td&gt;Tiered by funding stage (Pre-seed to Series A)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cloud.google.com/startup" rel="noopener noreferrer"&gt;https://cloud.google.com/startup&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;Hatch Program&lt;/td&gt;
&lt;td&gt;Varies; 12 months of infrastructure credits&lt;/td&gt;
&lt;td&gt;Requires VC/Accelerator partner; Series A or less&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.digitalocean.com/hatch" rel="noopener noreferrer"&gt;https://www.digitalocean.com/hatch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;GitHub for Startups&lt;/td&gt;
&lt;td&gt;20 seats of Enterprise free for 1 year&lt;/td&gt;
&lt;td&gt;Funded up to Series B; new to paid plans&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/enterprise/startups" rel="noopener noreferrer"&gt;https://github.com/enterprise/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;MongoDB for Startups&lt;/td&gt;
&lt;td&gt;Free Atlas credits &amp;amp; one-on-one technical advice&lt;/td&gt;
&lt;td&gt;Series A or earlier; must be a product company&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.mongodb.com/startups" rel="noopener noreferrer"&gt;https://www.mongodb.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;Data &amp;amp; Analytics&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostHog&lt;/td&gt;
&lt;td&gt;PostHog for Startups&lt;/td&gt;
&lt;td&gt;$50,000 in credits + generous free tier&lt;/td&gt;
&lt;td&gt;Early-stage companies&lt;/td&gt;
&lt;td&gt;&lt;a href="https://posthog.com/startups" rel="noopener noreferrer"&gt;https://posthog.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datadog&lt;/td&gt;
&lt;td&gt;Datadog for Startups&lt;/td&gt;
&lt;td&gt;$30,000 - $100,000 in credits&lt;/td&gt;
&lt;td&gt;Requires VC/Accelerator partner referral&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.datadoghq.com/partner/datadog-for-startups/" rel="noopener noreferrer"&gt;https://www.datadoghq.com/partner/datadog-for-startups/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio Segment&lt;/td&gt;
&lt;td&gt;Segment Startup Program&lt;/td&gt;
&lt;td&gt;Up to $50,000 in credits&lt;/td&gt;
&lt;td&gt;Early-stage companies&lt;/td&gt;
&lt;td&gt;&lt;a href="https://segment.com/startups" rel="noopener noreferrer"&gt;https://segment.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mixpanel&lt;/td&gt;
&lt;td&gt;Mixpanel for Startups&lt;/td&gt;
&lt;td&gt;1 year free on Startup Plan (1B events)&lt;/td&gt;
&lt;td&gt;&amp;lt; 5 years old; &amp;lt; $8M funding&lt;/td&gt;
&lt;td&gt;&lt;a href="https://mixpanel.com/releases/startups/" rel="noopener noreferrer"&gt;https://mixpanel.com/releases/startups/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amplitude&lt;/td&gt;
&lt;td&gt;Amplitude for Startups&lt;/td&gt;
&lt;td&gt;1 year free on Growth Plan&lt;/td&gt;
&lt;td&gt;&amp;lt; 20 employees; &amp;lt; $10M funding&lt;/td&gt;
&lt;td&gt;&lt;a href="https://amplitude.com/venture-partner-program" rel="noopener noreferrer"&gt;https://amplitude.com/venture-partner-program&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Algolia&lt;/td&gt;
&lt;td&gt;Algolia Startup Program&lt;/td&gt;
&lt;td&gt;$10,000 in credits&lt;/td&gt;
&lt;td&gt;&amp;lt; 3 years old; &amp;lt; $5M funding&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.algolia.com/industries/startups" rel="noopener noreferrer"&gt;https://www.algolia.com/industries/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;Productivity &amp;amp; Collaboration&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retool&lt;/td&gt;
&lt;td&gt;Retool for Startups&lt;/td&gt;
&lt;td&gt;1 year free (up to $60,000 value)&lt;/td&gt;
&lt;td&gt;Series A or earlier; &amp;lt;$10M funding&lt;/td&gt;
&lt;td&gt;&lt;a href="https://retool.com/startups" rel="noopener noreferrer"&gt;https://retool.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;Notion for Startups&lt;/td&gt;
&lt;td&gt;Up to 6 months free (Business Plan + AI)&lt;/td&gt;
&lt;td&gt;&amp;lt; 100 employees; partner affiliation for 6 months&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.notion.com/startups/producthunt" rel="noopener noreferrer"&gt;https://www.notion.com/startups/producthunt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;td&gt;Linear for Startups&lt;/td&gt;
&lt;td&gt;Up to 6 months free on paid plans&lt;/td&gt;
&lt;td&gt;&amp;lt; 50 employees; requires VC/Accelerator partner&lt;/td&gt;
&lt;td&gt;&lt;a href="https://linear.app/startups" rel="noopener noreferrer"&gt;https://linear.app/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asana&lt;/td&gt;
&lt;td&gt;Asana for Startups&lt;/td&gt;
&lt;td&gt;Discount on plans (e.g., 50% off)&lt;/td&gt;
&lt;td&gt;Varies; direct application or via partner&lt;/td&gt;
&lt;td&gt;&lt;a href="https://asana.com/startups" rel="noopener noreferrer"&gt;https://asana.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Miro&lt;/td&gt;
&lt;td&gt;Miro for Startups&lt;/td&gt;
&lt;td&gt;$500 - $1,000 in credits&lt;/td&gt;
&lt;td&gt;&amp;lt; 30 employees; partner affiliation for higher tier&lt;/td&gt;
&lt;td&gt;&lt;a href="https://miro.com/startups/" rel="noopener noreferrer"&gt;https://miro.com/startups/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;Slack Discounts&lt;/td&gt;
&lt;td&gt;25-30% off Pro/Business+ plans&lt;/td&gt;
&lt;td&gt;&amp;lt; 200 employees; available via partners&lt;/td&gt;
&lt;td&gt;&lt;a href="https://slack.com/partner-offers" rel="noopener noreferrer"&gt;https://slack.com/partner-offers&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;Sales, Marketing &amp;amp; CX&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intercom&lt;/td&gt;
&lt;td&gt;Early Stage Program&lt;/td&gt;
&lt;td&gt;93% off year 1, then tapering discount&lt;/td&gt;
&lt;td&gt;&amp;lt; 15 employees; &amp;lt; $10M funding&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.intercom.com/help/en/articles/9361928-early-stage-program" rel="noopener noreferrer"&gt;https://www.intercom.com/help/en/articles/9361928-early-stage-program&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HubSpot&lt;/td&gt;
&lt;td&gt;HubSpot for Startups&lt;/td&gt;
&lt;td&gt;Up to 90% off year 1, then tapering discount&lt;/td&gt;
&lt;td&gt;Tiered by funding; partner affiliation for best rate&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.hubspot.com/startups" rel="noopener noreferrer"&gt;https://www.hubspot.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zendesk&lt;/td&gt;
&lt;td&gt;Zendesk for Startups&lt;/td&gt;
&lt;td&gt;6 months free of Zendesk Suite&lt;/td&gt;
&lt;td&gt;&amp;lt; 50 employees; up to Series B funding&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.zendesk.com/business/startups/" rel="noopener noreferrer"&gt;https://www.zendesk.com/business/startups/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freshworks&lt;/td&gt;
&lt;td&gt;Freshworks for Startups (Freshstack)&lt;/td&gt;
&lt;td&gt;$3,000+ in credits&lt;/td&gt;
&lt;td&gt;Early-stage companies&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.freshworks.com/company/partners/startup-program/freshstack/" rel="noopener noreferrer"&gt;https://www.freshworks.com/company/partners/startup-program/freshstack/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;Specialized Platforms&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ElevenLabs&lt;/td&gt;
&lt;td&gt;ElevenLabs Startup Grants&lt;/td&gt;
&lt;td&gt;3 months free (11M characters/month)&lt;/td&gt;
&lt;td&gt;&amp;lt; 25 employees; monetized product use case&lt;/td&gt;
&lt;td&gt;&lt;a href="https://elevenlabs.io/startup-grants" rel="noopener noreferrer"&gt;https://elevenlabs.io/startup-grants&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;OpenAI API Credits&lt;/td&gt;
&lt;td&gt;Up to $2,500 in credits&lt;/td&gt;
&lt;td&gt;Via partners like Microsoft or Ramp&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.microsoft.com/en-us/startups/ai" rel="noopener noreferrer"&gt;https://www.microsoft.com/en-us/startups/ai&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;Stripe Atlas &amp;amp; Startup Program&lt;/td&gt;
&lt;td&gt;$500 incorporation + waived processing fees&lt;/td&gt;
&lt;td&gt;Varies; Atlas is open, credit program for VC-backed&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com/startups" rel="noopener noreferrer"&gt;https://stripe.com/startups&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gusto&lt;/td&gt;
&lt;td&gt;Gusto for Startups&lt;/td&gt;
&lt;td&gt;6 months free payroll (via partners)&lt;/td&gt;
&lt;td&gt;All new businesses; partner offers vary&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gusto.com/product/solutions/size/start-up-payroll" rel="noopener noreferrer"&gt;https://gusto.com/product/solutions/size/start-up-payroll&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rippling&lt;/td&gt;
&lt;td&gt;Rippling for Startups&lt;/td&gt;
&lt;td&gt;Exclusive discounts &amp;amp; perks&lt;/td&gt;
&lt;td&gt;Via VC/Accelerator referral program&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.rippling.com/venture-firms-and-accelerators" rel="noopener noreferrer"&gt;https://www.rippling.com/venture-firms-and-accelerators&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Deep Dive: Cloud, Infrastructure &amp;amp; DevOps
&lt;/h2&gt;

&lt;p&gt;This is your foundation. The big cloud providers are fighting an "ecosystem war" to win your loyalty early. Their goal is to get you hooked on their entire suite of tools, not just hosting. This is the most valuable category of credits.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Cloudflare for Startups&lt;/strong&gt;
&lt;/h3&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%2Fyxgia25p6imh0hi3v4ls.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%2Fyxgia25p6imh0hi3v4ls.png" alt="Cloudflare for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to $250,000 in credits for their usage-based services, valid for one year.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; There are caps on high-demand services (e.g., only $10k on R2 storage, $50k on Workers AI). The best tiers ($25k+) require affiliation with a partner VC or accelerator.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Beyond CDN, you get access to Workers, Pages, R2, and security tools that can form a huge part of your stack.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.cloudflare.com/forstartups/" rel="noopener noreferrer"&gt;https://www.cloudflare.com/forstartups/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Amazon AWS Activate&lt;/strong&gt;
&lt;/h3&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%2F60396zio8y25bnnp8msq.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%2F60396zio8y25bnnp8msq.png" alt="Amazon AWS Activate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to $100,000 in flexible cloud credits, plus technical support credits and a "deal book" with discounts on other SaaS.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; The highest credit amounts almost always require you to be part of a partner VC or accelerator's portfolio.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; It's the market leader with the broadest set of services. Credits can be used on almost anything, including ML services on Bedrock.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://aws.amazon.com/activate/" rel="noopener noreferrer"&gt;https://aws.amazon.com/activate/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Microsoft for Startups Founders Hub&lt;/strong&gt;
&lt;/h3&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%2F1g8hm85cdzngh18v30ot.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%2F1g8hm85cdzngh18v30ot.png" alt="Microsoft for Startups Founders Hub" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to $150,000 in Azure credits PLUS free software: Microsoft 365, GitHub Enterprise (20 seats), Visual Studio, and more.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; The top tier requires a referral from an investor in their network.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; This is the ultimate ecosystem play. It can cover your cloud, dev tools (GitHub!), and office productivity software in one shot. The combined value is immense.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://portal.startups.microsoft.com/" rel="noopener noreferrer"&gt;https://portal.startups.microsoft.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Google Cloud for Startups&lt;/strong&gt;
&lt;/h3&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%2Faku27j4w73iqzz4ifkrr.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%2Faku27j4w73iqzz4ifkrr.png" alt="Google Cloud for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to $200,000 in credits over two years (100% cover in Y1, 20% in Y2). AI-focused startups can get up to $350,000.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Eligibility is tied directly to your funding stage (Pre-seed up to Series A).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Huge value, especially for AI companies. The two-year structure gives you a longer runway than most 12-month programs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://cloud.google.com/startup" rel="noopener noreferrer"&gt;https://cloud.google.com/startup&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;DigitalOcean Hatch Program&lt;/strong&gt;
&lt;/h3&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%2Ftuih5si8srgwya4108ef.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%2Ftuih5si8srgwya4108ef.png" alt="DigitalOcean Hatch Program" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 12 months of infrastructure credits (amount varies by partner). Killer pricing on NVIDIA H100 GPUs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Strictly partner-gated. You &lt;em&gt;must&lt;/em&gt; be affiliated with an approved accelerator or VC.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; The developer-friendly platform and exceptional GPU pricing make it a top choice for lean teams and AI startups.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.digitalocean.com/hatch" rel="noopener noreferrer"&gt;https://www.digitalocean.com/hatch&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;GitHub for Startups&lt;/strong&gt;
&lt;/h3&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%2Fkq68yd4gj0danc8r4960.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%2Fkq68yd4gj0danc8r4960.png" alt="GitHub for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 20 seats of GitHub Enterprise free for one year, plus 50% off Advanced Security.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Must be funded (up to Series B) and new to paid GitHub plans.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Your code lives on GitHub. Enterprise gives you the security, CI/CD, and collaboration features you'll eventually need, for free, from day one.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/enterprise/startups" rel="noopener noreferrer"&gt;https://github.com/enterprise/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;MongoDB for Startups&lt;/strong&gt;
&lt;/h3&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%2Fjrjctsk1joxycjvudjp5.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%2Fjrjctsk1joxycjvudjp5.png" alt="MongoDB for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Free MongoDB Atlas credits, one-on-one technical advice from their experts, and co-marketing opportunities. AI startups can get extra credits and promotion through their AI Innovators program.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; You need to be Series A or earlier and can't be an agency. They prefer referrals from VCs or accelerators, and you need a live website and company LinkedIn page to even apply.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Get your database infrastructure covered by the leading NoSQL platform. The direct access to technical advice is a huge perk that can save you days of debugging and help you architect your data layer correctly from the start.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.mongodb.com/startups" rel="noopener noreferrer"&gt;https://www.mongodb.com/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Deep Dive: Data, Analytics &amp;amp; Observability
&lt;/h2&gt;

&lt;p&gt;You can't build what you can't measure. These tools are non-negotiable for finding product-market fit. Be aware of two models here: the &lt;strong&gt;1-year free plan&lt;/strong&gt; (great up front, but watch for the pricing shock when it ends) and the &lt;strong&gt;generous free tier&lt;/strong&gt; (better for a slower, more predictable cost curve).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;PostHog for Startups&lt;/strong&gt;
&lt;/h3&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%2Fgx75eod0ak5bhdbti2rm.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%2Fgx75eod0ak5bhdbti2rm.png" alt="PostHog for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; A massive, always-free tier (30M events/month) plus $50,000 in credits if you outgrow it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; The credits are for when you scale past the free tier.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; It's an open-source, all-in-one platform (product analytics, session replay, feature flags, A/B testing). It can replace 3-4 other tools.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://posthog.com/startups" rel="noopener noreferrer"&gt;https://posthog.com/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Datadog for Startups&lt;/strong&gt;
&lt;/h3&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%2Feu5gqdadc4kky4oxw6mh.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%2Feu5gqdadc4kky4oxw6mh.png" alt="Datadog for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; $30,000 - $100,000 in credits for one year.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Partner-gated. You need a referral from a VC or accelerator.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; The industry standard for observability. Monitor your infrastructure, logs, and APM in one place.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.datadoghq.com/partner/datadog-for-startups/" rel="noopener noreferrer"&gt;https://www.datadoghq.com/partner/datadog-for-startups/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Twilio Segment Startup Program&lt;/strong&gt;
&lt;/h3&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%2Ffrnht0qm6dtcje3gn3ka.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%2Ffrnht0qm6dtcje3gn3ka.png" alt="Twilio Segment Startup Program" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to $50,000 in credits (can last up to two years).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Designed for early-stage companies.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; A leading Customer Data Platform (CDP). It's the plumbing that connects all your customer data tools, saving immense engineering effort.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://segment.com/startups" rel="noopener noreferrer"&gt;https://segment.com/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Mixpanel for Startups&lt;/strong&gt;
&lt;/h3&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%2Fj0v9t778ru2gxjsgmmg4.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%2Fj0v9t778ru2gxjsgmmg4.png" alt="Mixpanel for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 1 year free on their Startup Plan, which includes a massive 1 billion events.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Must be &amp;lt;5 years old with &amp;lt;$8M in funding. You have to start sending data within 90 days.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; No feature gates. You get all the advanced reports and add-ons from day one. A fantastic deal for B2C apps expecting high event volume.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://mixpanel.com/releases/startups/" rel="noopener noreferrer"&gt;https://mixpanel.com/releases/startups/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Amplitude for Startups&lt;/strong&gt;
&lt;/h3&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%2F29u9asfdp24jfnnmexqj.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%2F29u9asfdp24jfnnmexqj.png" alt="Amplitude for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 1 year free on the Growth plan, plus lifelong discounts after the free year.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; For startups with &amp;lt;20 employees and &amp;lt;$10M funding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; A powerful all-in-one platform with analytics, experimentation, and a CDP. The "discount for life" is a unique and valuable perk.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://amplitude.com/venture-partner-program" rel="noopener noreferrer"&gt;https://amplitude.com/venture-partner-program&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Algolia Startup Program&lt;/strong&gt;
&lt;/h3&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%2F3usha9h4er3b60v08fmc.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%2F3usha9h4er3b60v08fmc.png" alt="Algolia Startup Program" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; $10,000 in credits for 12 months.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Must be &amp;lt;3 years old with &amp;lt;$5M in funding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; The best-in-class API for building amazing search experiences in your product.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.algolia.com/industries/startups" rel="noopener noreferrer"&gt;https://www.algolia.com/industries/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Deep Dive: Productivity &amp;amp; Collaboration
&lt;/h2&gt;

&lt;p&gt;This is your startup's operating system. Some tools here are so dominant (Figma, Canva) they don't need a formal credit program; their free tiers are the deal.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Retool for Startups&lt;/strong&gt;
&lt;/h3&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%2Ffv24rjjabx6ufhpdqhvi.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%2Ffv24rjjabx6ufhpdqhvi.png" alt="Retool for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 1 year free on any monthly plan (up to $60,000 value), plus 25% off your second year. You also get their "Deal Book" with over $200k in partner offers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; You must be Series A or earlier with less than $10M in funding. The weird part: you have to upgrade to a paid plan &lt;em&gt;first&lt;/em&gt;, then apply to get the discount.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Stop wasting precious engineering time building internal dashboards, admin panels, and support tools from scratch. Retool lets you build them in a fraction of the time, so your team can focus on your core product.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://retool.com/startups" rel="noopener noreferrer"&gt;https://retool.com/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Notion for Startups&lt;/strong&gt;
&lt;/h3&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%2F5vdk04medqtnxagwuoqe.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%2F5vdk04medqtnxagwuoqe.png" alt="Notion for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to 6 months free on the Business Plan, including Notion AI.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; You need a partner code (from AWS Activate, etc.) for the 6-month deal; otherwise it's 3 months. For new customers with &amp;lt;100 employees.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; It's your wiki, project manager, and doc repository all in one. Free access to the AI features is a huge bonus.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.notion.com/startups/producthunt" rel="noopener noreferrer"&gt;https://www.notion.com/startups/producthunt&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Linear for Startups&lt;/strong&gt;
&lt;/h3&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%2Fopexjzz4kqea58u6r5ld.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%2Fopexjzz4kqea58u6r5ld.png" alt="Linear for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to 6 months free on any paid plan.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Strictly partner-gated. You need a code from a VC or accelerator partner and must have &amp;lt;50 employees.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; The gold standard for issue tracking in modern software teams. It's fast, beautiful, and a joy to use.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://linear.app/startups" rel="noopener noreferrer"&gt;https://linear.app/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Miro for Startups&lt;/strong&gt;
&lt;/h3&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%2Fw290hs086fvf63cr7yee.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%2Fw290hs086fvf63cr7yee.png" alt="Miro for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; $1,000 in credits if you have a partner affiliation, or apply for $500 without one.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; For new customers with &amp;lt;30 employees.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; The best digital whiteboard for brainstorming, sprint planning, and remote collaboration.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://miro.com/startups/" rel="noopener noreferrer"&gt;https://miro.com/startups/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Figma &amp;amp; Canva&lt;/strong&gt;
&lt;/h3&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%2Fehv4k6c2notgx4i5pyhv.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%2Fehv4k6c2notgx4i5pyhv.png" alt="Figma" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; No formal credit programs. Their value is in their incredibly powerful and functional free tiers. Figma also offers its pro plan free for students and educators.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why They're Worth It:&lt;/strong&gt; They are the undisputed leaders. Figma for product UI/UX design, Canva for marketing and business assets. You can build your entire visual identity and product mockups for free.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;https://www.figma.com/&lt;/a&gt; and &lt;a href="https://www.canva.com/" rel="noopener noreferrer"&gt;https://www.canva.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Deep Dive: Sales, Marketing &amp;amp; CX
&lt;/h2&gt;

&lt;p&gt;When you start getting users, you need tools to talk to them. The strategy here is often the &lt;strong&gt;"tapering discount"&lt;/strong&gt;: a massive discount in year one that shrinks over time. This makes adoption cheap but locks you in. &lt;strong&gt;Warning:&lt;/strong&gt; calculate the Total Cost of Ownership (TCO) over 3 years before committing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Intercom for Startups&lt;/strong&gt;
&lt;/h3&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%2Fslau6h6yfxpzuf7y91i2.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%2Fslau6h6yfxpzuf7y91i2.png" alt="Intercom for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; A steep tapering discount: 93% off Year 1, 50% off Year 2, and 25% off Year 3.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; For new customers with &amp;lt;15 employees and &amp;lt;$10M funding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; A top-tier platform for customer messaging, support bots, and help centers. The year-one price is a steal.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.intercom.com/help/en/articles/9361928-early-stage-program" rel="noopener noreferrer"&gt;https://www.intercom.com/help/en/articles/9361928-early-stage-program&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;HubSpot for Startups&lt;/strong&gt;
&lt;/h3&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%2Fsv21zqfm2usl0pnc8zk4.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%2Fsv21zqfm2usl0pnc8zk4.png" alt="HubSpot for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Up to 90% off Year 1, 50% off Year 2, and 25% off in perpetuity.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; The best 90% discount requires a partner affiliation and &amp;lt;$2M in funding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; An all-in-one CRM, marketing, and sales platform. If you go all-in on HubSpot, this deal can save you a fortune.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.hubspot.com/startups" rel="noopener noreferrer"&gt;https://www.hubspot.com/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Zendesk for Startups&lt;/strong&gt;
&lt;/h3&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%2Fuu781evtpf12yhlijk84.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%2Fuu781evtpf12yhlijk84.png" alt="Zendesk for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 6 months free of the full Zendesk Suite.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; For new customers with &amp;lt;50 employees and up to Series B funding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; A straightforward, generous free trial of a powerful, mature customer support platform.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://www.zendesk.com/business/startups/" rel="noopener noreferrer"&gt;https://www.zendesk.com/business/startups/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Deep Dive: Specialized &amp;amp; Emerging Platforms
&lt;/h2&gt;

&lt;p&gt;Your startup needs more than just cloud and SaaS. Here are deals for AI, payments, legal, and HR.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;ElevenLabs Startup Grants (AI Voice)&lt;/strong&gt;
&lt;/h3&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%2Foslk19qt2otxlzjjo7j1.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%2Foslk19qt2otxlzjjo7j1.png" alt="ElevenLabs Startup Grants" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; 3 months free, including 11 million characters/month (200+ hours of audio).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Catch:&lt;/strong&gt; Must have &amp;lt;25 employees and a clear product monetization plan.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; The leading platform for generative voice AI. Perfect for building voice-enabled products.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://elevenlabs.io/startup-grants" rel="noopener noreferrer"&gt;https://elevenlabs.io/startup-grants&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;OpenAI API Credits (AI LLMs) via Microsoft for AI Startup&lt;/strong&gt;
&lt;/h3&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%2Fkyluhn8wcnt184x31dx1.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%2Fkyluhn8wcnt184x31dx1.png" alt="Microsoft for AI Startup" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; No direct program, but you can get credits through partners. Microsoft for Startups lets you use Azure credits on OpenAI models. Fintech platforms like Ramp offer up to $2,500 in direct API credits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Access to GPT-4 and other state-of-the-art models.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; Apply via &lt;a href="https://www.microsoft.com/en-us/startups/ai" rel="noopener noreferrer"&gt;https://www.microsoft.com/en-us/startups/ai&lt;/a&gt; or check your corporate card perks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Stripe for Startups (Payments &amp;amp; Incorporation)&lt;/strong&gt;
&lt;/h3&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%2Fno4xpj8a1d1i1t4by8zt.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%2Fno4xpj8a1d1i1t4by8zt.png" alt="Stripe for Startups" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Deal:&lt;/strong&gt; Two parts. &lt;strong&gt;Stripe Atlas&lt;/strong&gt; incorporates your company for a $500 flat fee. The &lt;strong&gt;Startup Program&lt;/strong&gt; (for VC-backed companies) offers waived payment processing fees (e.g., $25k fee-free).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Why It's Worth It:&lt;/strong&gt; Atlas demystifies and cheapens the legal setup process. Waived fees mean more revenue in your pocket.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://stripe.com/atlas" rel="noopener noreferrer"&gt;https://stripe.com/atlas&lt;/a&gt; and &lt;a href="https://stripe.com/startups" rel="noopener noreferrer"&gt;https://stripe.com/startups&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Your Game Plan: How to Maximize These Credits
&lt;/h2&gt;

&lt;p&gt;Getting the credits is easy. Using them strategically is what matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Build the "Zero-Cost" First-Year Stack
&lt;/h3&gt;

&lt;p&gt;By layering these deals, you can eliminate most of your overhead for the first 12-18 months. Here's a sample stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Formation:&lt;/strong&gt; &lt;strong&gt;Stripe Atlas&lt;/strong&gt; ($500).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cloud &amp;amp; Dev:&lt;/strong&gt; &lt;strong&gt;Microsoft for Startups&lt;/strong&gt; ($150k Azure credits + free GitHub Enterprise + free M365).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Docs &amp;amp; PM:&lt;/strong&gt; &lt;strong&gt;Notion for Startups&lt;/strong&gt; (6 months free via Microsoft partner code).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Analytics:&lt;/strong&gt; &lt;strong&gt;Mixpanel for Startups&lt;/strong&gt; (1 year free).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Design:&lt;/strong&gt; &lt;strong&gt;Figma&lt;/strong&gt; and &lt;strong&gt;Canva&lt;/strong&gt; (free tiers).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Timing is Everything
&lt;/h3&gt;

&lt;p&gt;Activate programs only when you need them. Most are time-bound.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Day 1:&lt;/strong&gt; Use &lt;strong&gt;Stripe Atlas&lt;/strong&gt; to incorporate.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;First Hire:&lt;/strong&gt; Activate &lt;strong&gt;Gusto&lt;/strong&gt; or &lt;strong&gt;Rippling&lt;/strong&gt; deals for HR/payroll.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;MVP Dev:&lt;/strong&gt; Activate &lt;strong&gt;AWS/GCP/Azure&lt;/strong&gt; and &lt;strong&gt;GitHub&lt;/strong&gt; credits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Pre-Launch:&lt;/strong&gt; Activate &lt;strong&gt;Mixpanel/PostHog&lt;/strong&gt; to instrument your app.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Post-Launch:&lt;/strong&gt; Activate &lt;strong&gt;Intercom/HubSpot&lt;/strong&gt; to manage users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. How to Get the "Invite-Only" Deals
&lt;/h3&gt;

&lt;p&gt;Many of the best deals (Linear, Datadog, Digital Ocean, Microsoft) are partner-gated. If you're not in a top accelerator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Join Startup Communities:&lt;/strong&gt; Many paid communities are official partners and unlock deals worth more than the membership fee.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Use Fintech "Super-Partners":&lt;/strong&gt; Corporate cards like &lt;strong&gt;Ramp&lt;/strong&gt; and &lt;strong&gt;Brex&lt;/strong&gt; have huge deal books with exclusive offers for their customers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Ask Accelerators:&lt;/strong&gt; When considering an accelerator, ask for their list of software perks. It's part of their value proposition.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Watch Out For These Traps (A Checklist)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;🔍 Read the Fine Print:&lt;/strong&gt; Check for usage caps on specific services (like Cloudflare's R2 limit).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;🗓️ Track Expiration Dates:&lt;/strong&gt; Most deals expire in 12 months. Use 'em or lose 'em.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;💸 Model the "Pricing Shock":&lt;/strong&gt; For tapering deals (HubSpot, Intercom), calculate your year 2 and 3 costs. Don't get caught by surprise.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;✅ Confirm Eligibility First:&lt;/strong&gt; Don't build your workflow around a tool until you're sure you qualify for their startup program.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now go build something amazing.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>startup</category>
      <category>softwaredevelopment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Async_Dime Office Personalities</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sat, 26 Jul 2025 18:21:18 +0000</pubDate>
      <link>https://forem.com/asynchronope/asyncdime-office-personalities-k8i</link>
      <guid>https://forem.com/asynchronope/asyncdime-office-personalities-k8i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition – CSS Art: Office Culture&lt;/a&gt;.&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;Cluttered desks, whether when we viewed over Zoom or onsite, including mine, tells a story. I wanted to freeze-frame that energy in pure CSS which is four tiny workstations with each one screaming its owner’s personality. No frameworks, no images (i put one emoji as "image" tho) just gradients, borders, and far too many &lt;code&gt;border-radius&lt;/code&gt; and other css pixel values.&lt;/p&gt;

&lt;h2&gt;
  
  
  See it in action
&lt;/h2&gt;

&lt;p&gt;each desk can be clicked, and you can use 'esc' to exit the workspace's screen. &lt;/p&gt;

&lt;p&gt;PS: &lt;strong&gt;Optimal scale view of CodePen below is &lt;em&gt;0.5x&lt;/em&gt; scale&lt;/strong&gt; :)&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/bO-05/embed/gbawRQP?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bO-05/async_dime-office" rel="noopener noreferrer"&gt;https://github.com/bO-05/async_dime-office&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it came together
&lt;/h2&gt;

&lt;p&gt;I started from a blank &lt;code&gt;index.html&lt;/code&gt;, sketched each desk with flex and grid, then layered on animations: computer screens, objects glow, pages fluttering, and readjusting. I get an impression of 3-second loops felt lively without being chaotic. Far too many &lt;code&gt;border-radius&lt;/code&gt; and setting pixel positioning of objects, but it is nice.&lt;/p&gt;

&lt;p&gt;The file ended up around &lt;strong&gt;4 k lines of CSS&lt;/strong&gt; – chunky, but every keyframe is handcrafted (with the occasional AI nudge – first time posting to CodePen, I’ll take all the help I can get).  &lt;/p&gt;

&lt;p&gt;Desks are &lt;strong&gt;clickable&lt;/strong&gt;: hit one and it jumps into fullscreen; mouse-wheel or arrow keys let you scroll the zoomed-in scene. Hover the little characters to read their random chatter. I use vanilla events.&lt;/p&gt;

&lt;h2&gt;
  
  
  If I had more time
&lt;/h2&gt;

&lt;p&gt;Maybe I'll add more personal items like wallet, bags, sunglasses that make each desk more personal. Record a few extra speech-bubble lines (the developer needs more dad jokes) would be nice too. Also let the rubber-duck squeak on click (CSS-only animation, no audio). And maybe ship a dark-mode toggle for late-night coders. And few ui readjusting, I still felt this isn't that &lt;em&gt;nice&lt;/em&gt; :).&lt;/p&gt;

&lt;p&gt;Thanks for reading – feedback is welcome, and feel free to remix the pen!  &lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>AI Blog Studio: Multimedia Content Generation with AI &amp; Storyblok</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sun, 29 Jun 2025 09:47:20 +0000</pubDate>
      <link>https://forem.com/asynchronope/ai-blog-studio-multimedia-content-generation-with-ai-storyblok-44j</link>
      <guid>https://forem.com/asynchronope/ai-blog-studio-multimedia-content-generation-with-ai-storyblok-44j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/storyblok"&gt;Storyblok Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;AI Blog Studio is a multimedia content generation platform that combines AI technologies with Storyblok's headless CMS. The application generates blog posts with AI-written content, contextual images, and audio narration, then stores and manages this content through Storyblok's API.&lt;/p&gt;

&lt;p&gt;The platform automates the creation of multimedia blog posts while providing content creators with control over the generation process. Users can create complete blog experiences including text, images, and audio accessibility features through a single interface.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Application:&lt;/strong&gt; &lt;a href="https://aiblogstudio.chronolove.app/" rel="noopener noreferrer"&gt;https://aiblogstudio.chronolove.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin Access:&lt;/strong&gt; Visit &lt;a href="https://aiblogstudio.chronolove.app/login" rel="noopener noreferrer"&gt;login page&lt;/a&gt; and use password: &lt;code&gt;devtosecurestoryblokpassword123&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storyblok Space:&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://app.storyblok.com/#/me/spaces/285396856923566" rel="noopener noreferrer"&gt;https://app.storyblok.com/#/me/spaces/285396856923566&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This application uses Storyblok as a headless CMS backend for content storage. Content is managed via Storyblok's Management API and displayed through the frontend at &lt;a href="https://aiblogstudio.chronolove.app/" rel="noopener noreferrer"&gt;https://aiblogstudio.chronolove.app&lt;/a&gt;. User when logged in can access the admin page and access all functionalities to generate multimedia blog posts with the help of AI.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/bO-05/aiblogstudio" rel="noopener noreferrer"&gt;https://github.com/bO-05/aiblogstudio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshots&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Homepage showing published blog posts &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%2Fuz64x5wyzms815t4z3b1.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%2Fuz64x5wyzms815t4z3b1.png" alt="Homepage showing published blog posts" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Login page with password field (Password: &lt;code&gt;devtosecurestoryblokpassword123&lt;/code&gt;) &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%2Fcrf1txt0n3bu37nnfhr4.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%2Fcrf1txt0n3bu37nnfhr4.png" alt="Login page with password field" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Admin panel content generation form &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%2Fwr7eqzndo60guf9snnzz.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%2Fwr7eqzndo60guf9snnzz.png" alt="Admin panel content generation form" width="800" height="449"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modal showing blog generated successfully&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%2F9zs0vj2kttmwq2azztxl.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%2F9zs0vj2kttmwq2azztxl.png" alt="Modal showing blog generated successfully" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Timeline view showing post with no playable audio status &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%2Fz0a5mrerhhfhf6ghyfin.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%2Fz0a5mrerhhfhf6ghyfin.png" alt="Timeline view showing post with no playable audio status" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Timeline view showing post with playable audio status &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%2Fhyu9z5986gnfe6hh5wky.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%2Fhyu9z5986gnfe6hh5wky.png" alt="Timeline view showing post with playable audio status" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Network tab showing Storyblok API calls when publishing blog post&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%2Fn9tl6tk6lcjufdi8w1ob.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%2Fn9tl6tk6lcjufdi8w1ob.png" alt="Network tab showing Storyblok API calls when publishing blog post" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storyblok content tab with published status of blog post &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%2Fusjvsahrctjmwqnmaw56.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%2Fusjvsahrctjmwqnmaw56.png" alt="Storyblok content tab with published status of blog post" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List of blog posts in /blog page&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%2Flhkqkrxlw36ly0k6tw40.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%2Flhkqkrxlw36ly0k6tw40.png" alt="List of blog posts in /blog page" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Individual blog post without active audio player (only logged in user can generate audio)&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%2Fi358tuajlgdlezraaerg.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%2Fi358tuajlgdlezraaerg.png" alt="Individual blog post without active audio player" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Individual blog post with active audio player &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%2Firfsgf6ss076p6awq5x7.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%2Firfsgf6ss076p6awq5x7.png" alt="Individual blog post with active audio player" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Frontend &amp;amp; Core
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 18&lt;/strong&gt; with TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; for development and builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Router DOM&lt;/strong&gt; for client-side routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framer Motion&lt;/strong&gt; for animations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lucide React&lt;/strong&gt; for icons&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  AI Services
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mistral AI&lt;/strong&gt; (&lt;code&gt;mistral-large-latest&lt;/code&gt;) for content generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAL AI&lt;/strong&gt; with Imagen4 for image generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; for text-to-speech audio&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Content Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storyblok CMS&lt;/strong&gt; as headless backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storyblok JS Client&lt;/strong&gt; for API integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LocalStorage&lt;/strong&gt; for session management&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Netlify&lt;/strong&gt; for hosting with serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Netlify Functions&lt;/strong&gt; for production audio generation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How I Used Storyblok
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Headless CMS Implementation
&lt;/h3&gt;

&lt;p&gt;I implemented Storyblok as a headless CMS backend, using it for content storage while building a custom React frontend. The application uses Storyblok's Management API for content operations and the Delivery API for content retrieval.&lt;/p&gt;
&lt;h3&gt;
  
  
  Content Type Structure
&lt;/h3&gt;

&lt;p&gt;Created a &lt;code&gt;blog_post&lt;/code&gt; content type in Storyblok with these fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;title&lt;/code&gt; (Text) - Blog post headlines&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content&lt;/code&gt; (Rich Text) - Full markdown content&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;excerpt&lt;/code&gt; (Text) - Post summaries&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;image&lt;/code&gt; (Asset) - AI-generated images with external URL support&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;audio&lt;/code&gt; (Asset) - Text-to-speech audio stored as data URLs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;theme&lt;/code&gt; (Text) - Content categorization&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tone&lt;/code&gt; (Text) - Writing style metadata
&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%2Flpla5crafg81tcp2hcu3.png" alt=" raw `blog_post` endraw  content type with title, content, excerpt, image, theme, tone, audio fields" width="800" height="449"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  API Integration
&lt;/h3&gt;

&lt;p&gt;The application uses environment variables for Storyblok configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Environment setup&lt;/span&gt;
&lt;span class="nx"&gt;VITE_STORYBLOK_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;your_storyblok_preview_token&lt;/span&gt;
&lt;span class="nx"&gt;VITE_STORYBLOK_MANAGEMENT_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;your_storyblok_management_token&lt;/span&gt;
&lt;span class="nx"&gt;VITE_STORYBLOK_SPACE_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;your_space_id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Content Publishing:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;publishPost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BlogPost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;spaceId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_STORYBLOK_SPACE_ID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;managementToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_STORYBLOK_MANAGEMENT_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;storyData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;story&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`blog/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blog_post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;excerpt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;excerpt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;imageUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;tone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tone&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;storyblokManagement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`spaces/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;spaceId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/stories`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;storyData&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;storyblokManagement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`spaces/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;spaceId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/stories/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;storyId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/publish`&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Content Retrieval:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getStories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;storyblok&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cdn/stories&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;published&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blog_post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;starts_with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blog/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;per_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;cv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// Cache busting&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Management API&lt;/strong&gt; for CRUD operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery API&lt;/strong&gt; for content retrieval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Folder Management&lt;/strong&gt; with automatic blog folder creation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Publishing&lt;/strong&gt; with immediate availability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asset Handling&lt;/strong&gt; for images and audio data URLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slug Generation&lt;/strong&gt; for SEO-friendly URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Content Generation with Mistral AI
&lt;/h3&gt;

&lt;p&gt;Uses Mistral's &lt;code&gt;mistral-large-latest&lt;/code&gt; model for blog content generation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;generateContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;GenerationRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;MISTRAL_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mistral-large-latest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
      &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_MISTRAL_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configurable word counts (300-2000 words)&lt;/li&gt;
&lt;li&gt;Three tone options (professional, casual, humorous)&lt;/li&gt;
&lt;li&gt;JSON response parsing with fallback handling&lt;/li&gt;
&lt;li&gt;Title and excerpt generation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Image Generation with Imagen4
&lt;/h3&gt;

&lt;p&gt;Uses FAL AI's Imagen4 API for contextual image generation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;generateImage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FAL_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atmosphericPrompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;aspect_ratio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;16:9&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;num_images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Key &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_FAL_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Theme-based prompt generation&lt;/li&gt;
&lt;li&gt;Atmospheric scene composition&lt;/li&gt;
&lt;li&gt;16:9 aspect ratio for blog headers&lt;/li&gt;
&lt;li&gt;Fallback to placeholder images&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Text-to-Speech with ElevenLabs
&lt;/h3&gt;

&lt;p&gt;Dual-environment audio generation system:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production (Netlify Functions):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ELEVENLABS_API_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;VOICE_ID&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xi-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ELEVENLABS_API_KEY&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cleanText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eleven_turbo_v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;audioBuffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arrayBuffer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;audioBase64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;audioBuffer&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;base64&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;audioBase64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;contentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;audio/mpeg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Development (Client-side):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;generateAudio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ELEVENLABS_API_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;voiceId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;prepareTextForTTS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="na"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eleven_turbo_v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;voice_settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;stability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;similarity_boost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xi-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_ELEVENLABS_API_KEY&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;responseType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rachel voice model for consistent narration&lt;/li&gt;
&lt;li&gt;Markdown content cleaning for natural speech&lt;/li&gt;
&lt;li&gt;Base64 data URL storage for Storyblok persistence&lt;/li&gt;
&lt;li&gt;Environment-specific implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Content Warnings
&lt;/h3&gt;

&lt;p&gt;The application includes disclaimers about AI-generated content limitations and potential inaccuracies, encouraging users to review content before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learnings and Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical Challenges Solved
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Audio Storage in Storyblok&lt;/strong&gt;: The main challenge was storing dynamically generated audio files. I solved this by converting audio to base64 data URLs and storing them directly in Storyblok content fields, eliminating the need for external file hosting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-Environment Audio Generation&lt;/strong&gt;: Created a system that automatically detects the environment and uses either client-side APIs (development) or Netlify serverless functions (production) for audio generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Service AI Integration&lt;/strong&gt;: Coordinating three different AI services with different response formats and rate limits required careful error handling and user feedback systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storyblok Implementation Insights
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Headless Architecture Benefits&lt;/strong&gt;: Using Storyblok as a pure backend provided flexibility in frontend design while maintaining robust content management capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Token Management&lt;/strong&gt;: Implemented secure token handling with separate preview and management tokens, plus proper environment variable configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content Type Design&lt;/strong&gt;: Balancing flexibility with structure in the blog_post content type, especially for multimedia content with both traditional assets and data URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development Experience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Environment Configuration&lt;/strong&gt;: Managing multiple API keys across development and production environments required careful setup and validation systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;: Implemented configurable rate limiting to prevent API cost overruns while maintaining user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error Handling&lt;/strong&gt;: Each AI service has different failure modes, requiring specific error handling strategies and meaningful user feedback.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Headless CMS Integration&lt;/strong&gt;: Gained experience with Storyblok's Management and Delivery APIs, understanding the benefits of headless architecture for custom applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Service Orchestration&lt;/strong&gt;: Learned to coordinate multiple AI services effectively, handling different response formats and implementing fallback strategies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Team
&lt;/h2&gt;

&lt;p&gt;This project was developed by &lt;a href="https://dev.to/async_dime"&gt;async_dime&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built using React, TypeScript, Storyblok, and AI technologies&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Live Demo: &lt;a href="https://aiblogstudio.chronolove.app" rel="noopener noreferrer"&gt;Live demo&lt;/a&gt; | Admin: /login with password &lt;code&gt;devtosecurestoryblokpassword123&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>storyblokchallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>EPB: Turn Emails into Code - AI-Powered Pull Requests from Your Inbox</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Mon, 09 Jun 2025 00:50:29 +0000</pubDate>
      <link>https://forem.com/asynchronope/epb-turn-emails-into-code-ai-powered-pull-requests-from-your-inbox-33pg</link>
      <guid>https://forem.com/asynchronope/epb-turn-emails-into-code-ai-powered-pull-requests-from-your-inbox-33pg</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/postmark"&gt;Postmark Challenge: Inbox Innovators&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;EPB (Email PR Bot)&lt;/strong&gt; is an AI-powered code generation service that lets developers create code through email. Simply send an email with your code requirements, and within seconds, you'll receive a pull request with working code generated by Mistral AI, optimized for your specific repository.&lt;/p&gt;

&lt;p&gt;The application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receives emails through Postmark's inbound email parsing&lt;/li&gt;
&lt;li&gt;Extracts the instruction from the email body&lt;/li&gt;
&lt;li&gt;Identifies the target GitHub repository (via email content or user defaults)&lt;/li&gt;
&lt;li&gt;Analyzes the repository to understand existing code patterns and structure&lt;/li&gt;
&lt;li&gt;Generates contextually-aware code using Mistral AI's codestral model&lt;/li&gt;
&lt;li&gt;Creates a GitHub pull request with the generated files&lt;/li&gt;
&lt;li&gt;Responds to the sender with a link to view the PR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This workflow creates a seamless experience where developers can quickly implement new features or fix bugs without needing to switch contexts or open their code editor.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  How to Test EPB:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Send an email&lt;/strong&gt; to: &lt;code&gt;7c3d33ed3c24d9b62b5c9ee11cd0b019@inbound.postmarkapp.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include a code request&lt;/strong&gt; in the email body (see example below)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specify a repository&lt;/strong&gt; make pr in the test repo &lt;code&gt;bO-05/mailforge-test-target&lt;/code&gt; as current functionality and github repo/ token is only for this repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait for the response&lt;/strong&gt; with your PR link (usually within &amp;lt;1 minute)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Test Credentials:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use the default repository &lt;code&gt;bO-05/mailforge-test-target&lt;/code&gt; for testing&lt;/li&gt;
&lt;li&gt;No authentication is needed to test the service&lt;/li&gt;
&lt;li&gt;The system's GitHub token is configured to only have access to this test repository&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real-World Example Requests:
&lt;/h3&gt;

&lt;p&gt;I've tested the system with progressive enhancement requests to demonstrate its ability to understand context and build on existing code. Here are the actual email requests sent to the system:&lt;/p&gt;

&lt;h4&gt;
  
  
  Email #1: Basic Implementation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subject: Python Script to Convert DOCX to Markdown

Body:
Could you please implement a simple Python script that converts a .docx file to Markdown format (.md)? The goal is to extract the text (including basic formatting like headings, bold, italics, and bullet points) and output a clean Markdown version of the document.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Result: Successfully created docx_to_markdown.py with basic formatting conversion&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Email #2: Feature Enhancement
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subject: Enhancement Request: Additional Features for DOCX to Markdown Conversion of repo: "bO-05/mailforge-test-target"

Body:
I'd like to request a set of enhancements to a Python-based .docx to Markdown conversion tool — possibly building on a previous task you may have worked on involving basic text formatting extraction from Word documents.
This time, I'm looking to expand the feature set with the following:

Table conversion: Convert Word tables to Markdown tables (GitHub-compatible).

Image handling: Save embedded images to a local folder and insert Markdown image syntax in the output (e.g., ![alt text](images/image1.png)).

Hyperlink preservation: Convert Word hyperlinks to Markdown format [text](url).

Code block detection: For monospaced or code-style text (e.g., Courier New or "Code" paragraph styles), wrap the content in triple backticks (```

).


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Result: Enhanced the existing script with the requested features, building on the previous implementation&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Email #3: Frontend Addition
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Subject: Enhancement Request: simpe frontend for DOCX to Markdown Conversion of repo: "bO-05/mailforge-test-target"

Body:
make simple frontend and edit readme to reflect our app


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Result: PR created with index.html and app.py files (pending merge)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Request from email
&lt;/h4&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%2Fjnyh3jm9phsujq9qao0h.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%2Fjnyh3jm9phsujq9qao0h.png" alt="Request from email" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  GitHub PR Created by EPB
&lt;/h4&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%2Fnehxf71e5ded885ju447.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%2Fnehxf71e5ded885ju447.png" alt="GitHub PR Created by EPB" width="734" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Response Email with PR Link
&lt;/h4&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%2F7tipwnecxdi3pwrd9ol2.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%2F7tipwnecxdi3pwrd9ol2.png" alt="Response Email with PR Link" width="632" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Vercel logs
&lt;/h4&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%2F4gwuc68c3857taqhxyf6.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%2F4gwuc68c3857taqhxyf6.png" alt="vercel function logs" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/bO-05/epb" rel="noopener noreferrer"&gt;GitHub Repository: EPB (Email PR Bot)&lt;/a&gt;&lt;/p&gt;

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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python serverless function on Vercel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email Processing:&lt;/strong&gt; Postmark inbound email webhook&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Code Generation:&lt;/strong&gt; Mistral AI (codestral-latest model)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository Integration:&lt;/strong&gt; GitHub API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email Response:&lt;/strong&gt; Postmark outbound emails&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Implementation Process:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Setting up Postmark Inbound Processing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a Postmark server with inbound webhook processing&lt;/li&gt;
&lt;li&gt;Configured the webhook endpoint to point to the Vercel-hosted API&lt;/li&gt;
&lt;li&gt;Set up email validation and parsing to extract instructions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Repository Context Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implemented a system to fetch and analyze existing repository structure&lt;/li&gt;
&lt;li&gt;Created an algorithm to identify relevant files based on request context&lt;/li&gt;
&lt;li&gt;Built a context-aware prompt system for the AI model&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI Code Generation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrated with Mistral AI's codestral model&lt;/li&gt;
&lt;li&gt;Developed a custom prompt format that includes repository context&lt;/li&gt;
&lt;li&gt;Implemented parsing logic to extract multiple files from AI responses&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GitHub Integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a workflow to create branches, commit files, and open PRs&lt;/li&gt;
&lt;li&gt;Added support for handling existing files (update vs. create)&lt;/li&gt;
&lt;li&gt;Implemented error handling for repository access issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Response System:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designed HTML email templates for success and error scenarios&lt;/li&gt;
&lt;li&gt;Implemented email response logic through Postmark's outbound API&lt;/li&gt;
&lt;li&gt;Added tracking and detailed information in response emails&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Challenges and Solutions:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Repository Context:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Getting the AI to understand existing code patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Implemented targeted repository scanning to provide relevant code context&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Email Format Parsing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Reliably extracting target repositories and instructions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Created multiple regex patterns and fallback detection mechanisms&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Generation Quality:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Ensuring generated code integrates with existing repositories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Enhanced system prompts with detailed integration guidelines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Error Handling:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Providing useful feedback when errors occur&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Implemented detailed error emails with troubleshooting suggestions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Experience with Postmark:
&lt;/h3&gt;

&lt;p&gt;Postmark's inbound email parsing capabilities were central to this project's success. The reliable webhook system, clean email parsing, and structured JSON payload made it straightforward to extract and process email content.&lt;/p&gt;

&lt;p&gt;Key Postmark features used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inbound webhook processing for email reception&lt;/li&gt;
&lt;li&gt;Email body and subject extraction&lt;/li&gt;
&lt;li&gt;Reply handling with StrippedTextReply&lt;/li&gt;
&lt;li&gt;Outbound email API for response delivery&lt;/li&gt;
&lt;li&gt;HTML email formatting for rich responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The clean API and reliable delivery of Postmark made it the perfect foundation for this email-driven workflow. The ability to receive and process emails programmatically opened up an entirely new interface for code generation that doesn't require specialized tools or interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Team
&lt;/h2&gt;

&lt;p&gt;This project was developed by &lt;a href="https://dev.to/async_dime"&gt;async_dime&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>postmarkchallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>Devbridge, a knowledge bridge</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Mon, 12 May 2025 06:03:35 +0000</pubDate>
      <link>https://forem.com/asynchronope/devbridge-a-knowledge-bridge-4479</link>
      <guid>https://forem.com/asynchronope/devbridge-a-knowledge-bridge-4479</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aws-amazon-q-v2025-04-30"&gt;Amazon Q Developer "Quack The Code" Challenge&lt;/a&gt;: Crushing the Command Line&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;DevBridge&lt;/strong&gt;, an AI-Powered Cross-Project Knowledge Bridge designed to streamline command-line workflows for developers. It was developed rapidly over a few days for this hackathon, so please expect a lack of polish in some areas! Since it was heavily prototyped on Windows, its functionality on other platforms (like macOS or Linux distributions) hasn't been extensively tested and might have some quirks.&lt;/p&gt;

&lt;p&gt;The core problem DevBridge aims to solve is reducing the friction developers face when context-switching between multiple projects, trying to understand unfamiliar code, or reusing existing solutions. It tries to make your terminal a bit smarter by integrating with Amazon Q.&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%2Fxoqiw1roxuc42rox6321.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%2Fxoqiw1roxuc42rox6321.png" alt="devbridge help" width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a quick look at what DevBridge can do, based on its &lt;code&gt;devbridge --help&lt;/code&gt; output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;index&lt;/code&gt;&lt;/strong&gt;: Index repositories to build a local knowledge base.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;find&lt;/code&gt;&lt;/strong&gt;: Search for code patterns and text across your indexed projects.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;transfer&lt;/code&gt;&lt;/strong&gt;: Adapt and transfer code between projects using Amazon Q. This is a key feature leveraging Amazon Q!&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;document&lt;/code&gt;&lt;/strong&gt;: Generate documentation for code files using Amazon Q.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;analyze&lt;/code&gt;&lt;/strong&gt;: Analyze code files for best practices and issues with Amazon Q.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;check-q&lt;/code&gt;&lt;/strong&gt;: Verify your Amazon Q CLI setup.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;learn&lt;/code&gt;&lt;/strong&gt;: Fetch and process documentation from URLs or topics (with DeepWiki integration ideas).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;demo&lt;/code&gt;&lt;/strong&gt;: Run a quick demonstration of core features.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;init&lt;/code&gt;&lt;/strong&gt;: A guided setup for first-time use.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;chat&lt;/code&gt;&lt;/strong&gt;: An experimental interactive chat with Amazon Q about your code.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;repo&lt;/code&gt;&lt;/strong&gt;: Manage your local repositories.&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%2Fzor7r87dt0s1mm5h14je.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%2Fzor7r87dt0s1mm5h14je.png" alt="devbridge learn" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal is to help developers stay in their flow by bringing AI-powered assistance directly to the command line.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Python 3.8+&lt;/li&gt;
&lt;li&gt;  Git&lt;/li&gt;
&lt;li&gt;  An AWS account and a configured AWS Builder ID for Amazon Q Developer CLI access.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html" rel="noopener noreferrer"&gt;Amazon Q Developer CLI (&lt;code&gt;q&lt;/code&gt;) installed and configured&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Installation from TestPyPI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--index-url&lt;/span&gt; https://test.pypi.org/simple/ &lt;span class="nt"&gt;--extra-index-url&lt;/span&gt; https://pypi.org/simple/ devbridge
&lt;span class="c"&gt;# (This will install the latest version, e.g., 0.1.4 or newer if published)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, run &lt;code&gt;devbridge init&lt;/code&gt; for a quick guided setup!&lt;/p&gt;

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

&lt;p&gt;The code for DevBridge is open source and available on GitHub:&lt;br&gt;
&lt;a href="https://github.com/bO-05/devbridge" rel="noopener noreferrer"&gt;https://github.com/bO-05/devbridge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to explore! As mentioned, it was a quick build, so contributions or feedback for future polish are welcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Amazon Q Developer
&lt;/h2&gt;

&lt;p&gt;DevBridge uses the Amazon Q Developer CLI (&lt;code&gt;q&lt;/code&gt;) under the hood to bring AI capabilities to your terminal. Here's a brief overview:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Code Adaptation (&lt;code&gt;transfer&lt;/code&gt;):&lt;/strong&gt; When you use it DevBridge takes your source code and your prompt, sends it to the &lt;code&gt;q&lt;/code&gt; CLI, and then incorporates Q's suggested adaptations into your target file. This helps in refactoring code to fit new project contexts.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Code Analysis (&lt;code&gt;analyze&lt;/code&gt;):&lt;/strong&gt; The &lt;code&gt;analyze&lt;/code&gt; command sends the content of a specified file along with your query (via the &lt;code&gt;--prompt&lt;/code&gt; option) to the &lt;code&gt;q&lt;/code&gt; CLI. Amazon Q's explanation or analysis is then displayed in your terminal.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Documentation Generation (&lt;code&gt;document&lt;/code&gt;):&lt;/strong&gt; Similarly, the &lt;code&gt;document&lt;/code&gt; command uses &lt;code&gt;q&lt;/code&gt; to generate docstrings or other documentation for your code, based on the file content and your prompt.&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%2Fwhzmjk8g24154n4a0wkv.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%2Fwhzmjk8g24154n4a0wkv.png" alt="devbridge demo" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The integration is primarily through constructing and executing &lt;code&gt;q&lt;/code&gt; CLI commands with appropriate prompts based on user input and indexed code data. Given the short timeframe, the interaction with &lt;code&gt;q&lt;/code&gt; is direct and aims to showcase the potential of CLI-driven AI assistance. The main insight is that with clear prompts, the &lt;code&gt;q&lt;/code&gt; CLI is a powerful tool for these kinds of direct code manipulations and queries.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>awschallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Hey I just made a game, please try it folks! ✌️</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Sun, 27 Apr 2025 09:11:11 +0000</pubDate>
      <link>https://forem.com/asynchronope/hey-i-just-made-a-game-please-try-it-folks-1okd</link>
      <guid>https://forem.com/asynchronope/hey-i-just-made-a-game-please-try-it-folks-1okd</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c" class="crayons-story__hidden-navigation-link"&gt;Ali Roboshoot: A Phaser 3 Arcade Shooter Powered by Alibaba Cloud&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/asynchronope" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F137620%2F2b14c143-b37b-4529-9340-ae52a1e13af1.jpg" alt="asynchronope profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/asynchronope" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Adam
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Adam
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2433410" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/asynchronope" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F137620%2F2b14c143-b37b-4529-9340-ae52a1e13af1.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Adam&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 25 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c" id="article-link-2433410"&gt;
          Ali Roboshoot: A Phaser 3 Arcade Shooter Powered by Alibaba Cloud
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/alibabachallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;alibabachallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gamedev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gamedev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;33&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              12&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>alibabachallenge</category>
      <category>devchallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Ali Roboshoot: A Phaser 3 Arcade Shooter Powered by Alibaba Cloud</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Fri, 25 Apr 2025 15:11:17 +0000</pubDate>
      <link>https://forem.com/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c</link>
      <guid>https://forem.com/asynchronope/ali-roboshoot-a-phaser-3-arcade-shooter-powered-by-alibaba-cloud-30c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://int.alibabacloud.com/m/1000402443/" rel="noopener noreferrer"&gt;Alibaba Cloud&lt;/a&gt; Challenge: &lt;a href="https://dev.to/challenges/alibaba"&gt;Build a Web Game&lt;/a&gt;.&lt;/em&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%2Fym4ffwz3gfsainzt986v.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%2Fym4ffwz3gfsainzt986v.png" alt="Screenshot of Ali Roboshoot Main Menu screen"&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%2Fowir56kdd404d53dqfnm.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%2Fowir56kdd404d53dqfnm.png" alt="Screenshot of Ali Roboshoot gameplay"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Ali Roboshoot is a fast-paced, arcade shooter built with Phaser 3 and Vite. Players take command of an combat red car, battling waves of diverse robot enemies (Scarabs, Hornets, Spiders, and Orange Samurai) using primary weapons and a powerful secondary RPG.&lt;/p&gt;

&lt;p&gt;The core gameplay involves surviving as long as possible against increasingly difficult waves of enemies. Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;8-Directional Movement &amp;amp; Mouse Aiming:&lt;/strong&gt; Classic arcade controls.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Multiple Enemy Types:&lt;/strong&gt; Each with unique movement and attack patterns (melee, ranged, strafing).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Pickup System:&lt;/strong&gt; Collect health packs, ammo clips, RPG ammo, and temporary fire rate boosts dropped by enemies.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;RPG Secondary Weapon:&lt;/strong&gt; Fires explosive rounds with area-of-effect damage.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Objective Capture:&lt;/strong&gt; Capture flags guarded by special 'Orange Robot' enemies for bonus points. An arrow guides you to the current flag.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Time-Based Difficulty Scaling:&lt;/strong&gt; Enemies become more numerous and spawn faster over time.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Online Leaderboard:&lt;/strong&gt; Submit your initials and score to compete on the Top 5 leaderboard, powered by a serverless backend.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Visual Polish:&lt;/strong&gt; Includes enemy health bars, hit flashes, screen shake, explosions, and a retro pixel art style.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Custom Initials:&lt;/strong&gt; Players can set their own initials for the leaderboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: survive, destroy robots, capture flags, collect power-ups, and get the highest score!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Play the game live:&lt;/strong&gt; &lt;a href="https://aliroboshoot.chronolove.app/" rel="noopener noreferrer"&gt;https://aliroboshoot.chronolove.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://github.com/bO-05/ali-roboshoot" rel="noopener noreferrer"&gt;https://github.com/bO-05/ali-roboshoot&lt;/a&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/bO-05" rel="noopener noreferrer"&gt;
        bO-05
      &lt;/a&gt; / &lt;a href="https://github.com/bO-05/ali-roboshoot" rel="noopener noreferrer"&gt;
        ali-roboshoot
      &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;Alibaba Robot Shooter Game&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A web-based robot shooter game built with Phaser 3. Play as a combat red car and defend against waves of enemy robots!&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/bO-05/ali-roboshoot/public/screenshot.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FbO-05%2Fali-roboshoot%2Fpublic%2Fscreenshot.png" alt="screenshot"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A fast-paced, top-down arcade shooter built with Phaser 3 and Vite. Take command of an advanced combat vehicle and battle waves of robotic enemies in a futuristic sci-fi world!&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Game Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Ali Roboshoot&lt;/strong&gt; is a browser-based action game where you control a heavily armed combat vehicle fighting against relentless robot adversaries (Scarabs, Hornets, Spiders, &amp;amp; Orange Samurai Robot). Use quick reflexes, tactical movement, powerful weapons (including RPGs), and strategic objective captures to survive and achieve a high score!&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fast-paced, top-down arcade shooting action&lt;/li&gt;
&lt;li&gt;Control an advanced combat vehicle with 8-directional movement&lt;/li&gt;
&lt;li&gt;Multiple enemy types with unique attack patterns (melee, ranged, strafing)&lt;/li&gt;
&lt;li&gt;Objective Capture mechanic: Capture flags for bonus points&lt;/li&gt;
&lt;li&gt;Pickup system: Collect health, ammo, RPG ammo, and temporary fire rate boosts&lt;/li&gt;
&lt;li&gt;RPG secondary…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bO-05/ali-roboshoot" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Video Demo (2x speed):&lt;/strong&gt;   &lt;iframe src="https://www.youtube.com/embed/aT2yycBcRpg"&gt;
  &lt;/iframe&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Alibaba Cloud Services Implementation
&lt;/h2&gt;

&lt;p&gt;I utilized several Alibaba Cloud services to build and deploy Ali Roboshoot, primarily focusing on cost-effectiveness, scalability, and ease of use for a web game architecture. All services were provisioned in the &lt;code&gt;ap-southeast-1&lt;/code&gt; (Singapore) region.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Object Storage Service (OSS):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; OSS is ideal for hosting static assets and the frontend application build. It's cost-effective, highly available, and integrates well with other Alibaba services.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; I used two separate OSS buckets:

&lt;ul&gt;
&lt;li&gt;  asset bucket: Stores all game assets (spritesheets, sound effects, music). The game client loads these directly.&lt;/li&gt;
&lt;li&gt;  game bucket: Hosts the static website build output (HTML, JS, CSS generated by &lt;code&gt;npm run build&lt;/code&gt;). This bucket is configured for static website hosting.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Integration:&lt;/strong&gt; I configured a custom domain (&lt;code&gt;aliroboshoot.chronolove.app&lt;/code&gt;) to point to the game hosting bucket and enabled HTTPS through the Alibaba Cloud console, which handled the certificate management and integration with my external DNS provider. Deploying updates was streamlined using the &lt;code&gt;ossutil&lt;/code&gt; command-line tool to upload the contents of the &lt;code&gt;dist&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Experience:&lt;/strong&gt; Setting up static hosting and the custom domain/HTTPS involved navigating the console and DNS settings, which was a learning experience but ultimately successful. &lt;code&gt;ossutil&lt;/code&gt; was very convenient for deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Function Compute (FC):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; For the leaderboard backend API, I needed a simple way to handle POST requests (submit score) and GET requests (retrieve top scores). Function Compute offered a serverless approach, meaning I don't manage servers, it scales automatically, and I primarily pay for execution time, which is very cost-effective for this type of low-traffic API. I initially considered ECS but FC felt like a better fit for this simple API need and potential free tier benefits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; I created a service (&lt;code&gt;ali-bot-shooter-service&lt;/code&gt;) and deployed a Node.js 16 function (&lt;code&gt;highscore-api&lt;/code&gt;). The function code handles database connections, executes SQL queries to insert or retrieve scores, and formats the JSON response.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Integration:&lt;/strong&gt; An HTTP Trigger was configured for the function, providing a public API endpoint (&lt;code&gt;https://highscore-api-ali-bot-service-iwcbnbmnlw.ap-southeast-1.fcapp.run&lt;/code&gt;) that the Phaser game client calls using &lt;code&gt;fetch&lt;/code&gt;. Crucially, the function was configured to run within the same VPC as the RDS database, allowing secure access via the database's internal endpoint without exposing the database directly to the public internet. Environment variables within FC were used to securely store database credentials.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Experience:&lt;/strong&gt; FC was relatively straightforward to set up for a simple Node.js API. The key was configuring the VPC and Security Group correctly to allow communication with RDS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ApsaraDB RDS for MySQL:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; A persistent relational database was needed to store the leaderboard scores. RDS manages the database instance (provisioning, patching, backups), simplifying operations compared to self-hosting a database. MySQL is a familiar and robust choice.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; I provisioned a small ApsaraDB RDS for MySQL 8.0 instance (&lt;code&gt;mysql.n2.medium.1&lt;/code&gt;, Basic Edition, PL1 ESSD storage) within a VPC in the Singapore region. I created a dedicated database (&lt;code&gt;alibotshooter_scores&lt;/code&gt;) and a specific user (&lt;code&gt;alibot_user&lt;/code&gt;) with limited privileges for the Function Compute API to use. The database schema consists of a single &lt;code&gt;high_scores&lt;/code&gt; table (id, player_initials, score, created_at).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Integration:&lt;/strong&gt; The Function Compute service connects to RDS using the internal endpoint (&lt;code&gt;rm-gs5eh9n6m74822e3u.mysql.singapore.rds.aliyuncs.com&lt;/code&gt;) over the standard MySQL port (3306) within the secure VPC network. RDS Whitelist rules were configured initially for local development access via MySQL client and later potentially adjusted for the FC Security Group if needed (though VPC internal access often bypasses explicit IP whitelisting).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Experience:&lt;/strong&gt; Provisioning RDS was straightforward through the console. Connecting from Function Compute via the internal VPC endpoint worked well once the network configurations were correctly set up.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Game Development Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;First Game Project:&lt;/strong&gt; As my first significant web game project, this was a huge learning experience, particularly with the Phaser 3 framework, game state management, and asset loading. Never knew spritesheet is such a fun assets to work with.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cloud Deployment:&lt;/strong&gt; Integrating and deploying the frontend (OSS + Custom Domain/HTTPS) and backend (Function Compute + RDS + VPC) on Alibaba Cloud was a practical introduction to cloud architecture for web applications.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Feature Creep (Positive!):&lt;/strong&gt; The project grew from a basic shooter to include more complex systems like the RPG weapon, objective flags with guardian AI, and various pickups, which made development more challenging but also more rewarding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Community Assets:&lt;/strong&gt; Leveraging freely available graphical and audio assets (properly credited in the README) was essential for a solo developer to achieve a polished look and feel within the hackathon timeframe.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Repository Reset:&lt;/strong&gt; An early development mistake involved committing sensitive info to a private repo. This necessitated recreating the public repository and carefully migrating the cleaned codebase, reinforcing the importance of Git security practices.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frameworks:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Phaser 3&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Graphic Assets:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Matt Walkden&lt;/li&gt;
&lt;li&gt;Edu Silv Art&lt;/li&gt;
&lt;li&gt;OpenAI Sora&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Sound Effects and Music - All from Pixabay:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;freesound_community &lt;/li&gt;
&lt;li&gt;Driken Stan &lt;/li&gt;
&lt;li&gt;DjLofi &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The above contributors/ platforms/ frameworks made this project possible. Thank you!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Developed by B G Adam (async_dime)&lt;/em&gt; &lt;/p&gt;

</description>
      <category>alibabachallenge</category>
      <category>devchallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Code, Nature &amp; Personal Bits</title>
      <dc:creator>Adam</dc:creator>
      <pubDate>Wed, 29 Jan 2025 05:46:46 +0000</pubDate>
      <link>https://forem.com/asynchronope/code-nature-personal-bits-124e</link>
      <guid>https://forem.com/asynchronope/code-nature-personal-bits-124e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Compiling 2025 and Retro’ing and Debugging 2024.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;As a freelancer who's seen how deep specialization creates unexpected opportunities, I'm approaching 2025 with a &lt;strong&gt;"T-shaped growth"&lt;/strong&gt; mentality - going deep enough in my core skills (the vertical bar of the T) to fuel broader explorations (the horizontal top). &lt;/p&gt;

&lt;p&gt;Here's what that looks like in practice:&lt;/p&gt;




&lt;h2&gt;
  
  
  🏔️ Code &amp;amp; Growth
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ship First&lt;/strong&gt; - current focus queue:

&lt;ul&gt;
&lt;li&gt;Building client's internal DB (React + RxDB)&lt;/li&gt;
&lt;li&gt;No-nonsense Personal Finance Calculator (Next.js + Typescript)&lt;/li&gt;
&lt;li&gt;Multi-Persona Chat Generator (Next.js + Elevenlabs or Kokoro)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Challenge-Driven Development&lt;/strong&gt;: Monthly coding challenges (start small: 30-min daily sprints)&lt;/li&gt;

&lt;li&gt;Learn Expo, to make one app for web &amp;amp; mobile (Android &amp;amp; iOS)&lt;/li&gt;

&lt;li&gt;Learn cybersecurity by doing hands-on projects and build simple tool
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;My ongoing personal side project&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%2Fdref10xa5hkq5cyhk2rm.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%2Fdref10xa5hkq5cyhk2rm.png" alt="personal finance calculator" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌿 Nature Reboot Protocol
&lt;/h2&gt;

&lt;p&gt;There's something magical about standing on a mountain peak after hours of hiking. To be alone with nature, feel that same feeling of what our ancestors feel. During my university years, I lived this magic frequently—once four different mountains in a single month, including an adventure that took me 8 hours by bus to another province. Add snorkeling to the mix, and you get the picture of someone who was deeply connected to nature. I was.&lt;/p&gt;

&lt;p&gt;This year, I'm making a conscious decision to return to these roots. Why? Because I've learned that more nature equals a happier me. It's as simple as that. Let's be real - nature's my original mental health hack. No subscription required.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reigniting my university-era outdoor cadence:

&lt;ul&gt;
&lt;li&gt;1 mountain bi-monthly &lt;/li&gt;
&lt;li&gt;Getting back in the water (snorkeling, diving maybe, idk?)&lt;/li&gt;
&lt;li&gt;Rediscovering bus/ train adventure days (&amp;gt;5-hour rides = perfect audiobook time)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;New phone rules: 

&lt;ul&gt;
&lt;li&gt;No devices above 2,000m elevation&lt;/li&gt;
&lt;li&gt;No devices when it is nature time&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;As Trump, (hypothetically) said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Folks, our nature - it's tremendous, absolutely tremendous. The trees, they're doing things nobody's ever seen before. And the mountains? Big, beautiful mountains. Nobody has mountains like we do, believe me. It's fantastic, maybe the most fantastic nature in history. That's what everyone is saying!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;😂😂&lt;/p&gt;

&lt;p&gt;But, it is beautiful, isn't it?&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%2Fjpg0gwakvatplz1qgrkg.jpg" 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%2Fjpg0gwakvatplz1qgrkg.jpg" alt="Sky and mountain" width="800" height="600"&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%2Fwwov515b9vugkos77h9a.jpg" 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%2Fwwov515b9vugkos77h9a.jpg" alt="Clownfish &amp;amp; corals" width="800" height="670"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Connection Stack
&lt;/h2&gt;

&lt;p&gt;The post-pandemic world left many of us, including myself, retreating further into our shells. While my introverted nature served me well during isolation, 2025 is about finding balance. Starting from zero? Perfect. No legacy code to maintain here.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;2024 Baseline&lt;/th&gt;
&lt;th&gt;2025 Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IRL Collabs&lt;/td&gt;
&lt;td&gt;4/year&lt;/td&gt;
&lt;td&gt;1/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech Coffee Chats&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1/quarterly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mentorship&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;1 mentee&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📔 Journaling 2.0
&lt;/h2&gt;

&lt;p&gt;In 2024, I started a journaling practice that, like many new year's resolutions, faded after two months. But I was approaching it all wrong. I saw journaling as a productivity hack, but its real value lies in its ability to make us more human. If I wrote it, I was alive that day. That's enough.&lt;/p&gt;

&lt;p&gt;Thankfully, my undated journal is patient, waiting for me to continue our conversation in 2025.&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%2Fi.imgur.com%2FgtuBdzR.jpeg" 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%2Fi.imgur.com%2FgtuBdzR.jpeg" alt="Filled my journal again" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New rule:&lt;/strong&gt; If it's written, it counts. Even if it's:&lt;br&gt;&lt;br&gt;
&lt;code&gt;console.log("2025-02-01: Ate rice, debugged things, survived")&lt;/code&gt;&lt;br&gt;&lt;br&gt;
The undated journal is my anti-perfectionism weapon. Now tracking:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some daily wins (any size)
&lt;/li&gt;
&lt;li&gt;1 curiosity nugget (non-tech allowed)
&lt;/li&gt;
&lt;li&gt;Sunset time (forces outdoor break)&lt;/li&gt;
&lt;li&gt;Mood&lt;/li&gt;
&lt;li&gt;Habits&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Core Realizations
&lt;/h2&gt;

&lt;p&gt;These two brain bombs keep me grounded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I read psycho-cybernetics by Maxwell Maltz and I think this quote capture a principle very similar to what his teachings is about:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"I stopped thinking life was so hard and it stopped being so hard"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;An infoblessing + infohazard in one quote:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"There is no audience to perform for, there is no approval, no admiration to attain. There is no role worth playing, there is no one to convince. Let it go."&lt;/p&gt;
&lt;/blockquote&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%2Fz0ktvarkmgemt28j146u.jpg" 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%2Fz0ktvarkmgemt28j146u.jpg" alt="An infoblessing + infohazard in one quote" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;All pictures above were taken by me and are from my own personal gallery during my trip.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Your turn:&lt;/strong&gt; What's one non-technical goal that'll make your 2025 coding better? Mine's "nature will take care of you". Let's compare roadmaps 👇 &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>career</category>
    </item>
  </channel>
</rss>
