<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Maisam Abbas</title>
    <description>The latest articles on DEV Community by Maisam Abbas (@maisamabbas0323).</description>
    <link>https://dev.to/maisamabbas0323</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3990488%2F32c4e51a-2d3e-446c-b605-500f681ab7be.png</url>
      <title>DEV Community: Maisam Abbas</title>
      <link>https://dev.to/maisamabbas0323</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maisamabbas0323"/>
    <language>en</language>
    <item>
      <title>Unscript — A Sanity-Powered Writing Agent That Actually Knows Why It Changes Your Text</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Sun, 27 Sep 2026 12:13:41 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/unscript-a-sanity-powered-writing-agent-that-actually-knows-why-it-changes-your-text-5am0</link>
      <guid>https://dev.to/maisamabbas0323/unscript-a-sanity-powered-writing-agent-that-actually-knows-why-it-changes-your-text-5am0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/sanity-2026-09-16"&gt;Sanity Challenge, Path One: Ship an Agent That Queries Real Content&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;Unscript&lt;/strong&gt;, a terminal-based writing transformation agent that uses structured knowledge from Sanity to make writing feel more natural, clear, and human without treating every piece of text the same way.&lt;/p&gt;

&lt;p&gt;The main idea started with a simple problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most writing tools can change text. The harder part is deciding &lt;strong&gt;how&lt;/strong&gt; the text should be changed and what should be preserved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of putting all of the rules inside the prompt, I wanted the agent to have an actual knowledge layer that it could query.&lt;/p&gt;

&lt;p&gt;That became Unscript.&lt;/p&gt;

&lt;p&gt;Unscript combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A terminal-first user experience&lt;/li&gt;
&lt;li&gt;A structured Sanity Knowledge Base&lt;/li&gt;
&lt;li&gt;Sanity Context MCP&lt;/li&gt;
&lt;li&gt;Gemini 3.1 Flash-Lite&lt;/li&gt;
&lt;li&gt;Deterministic validation&lt;/li&gt;
&lt;li&gt;Source-aware retrieval&lt;/li&gt;
&lt;li&gt;Configurable writing levels and content types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resulting flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Unscript CLI
  ↓
Agent
  ↓
Sanity Context MCP
  ↓
Structured Knowledge
  ↓
Gemini 3.1 Flash-Lite
  ↓
Transformation
  ↓
Validation
  ↓
Polished CLI Output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that the model does not have to invent the writing rules on its own.&lt;/p&gt;

&lt;p&gt;The rules live in structured content.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built It This Way
&lt;/h2&gt;

&lt;p&gt;I did not want to build another text box with a prompt behind it.&lt;/p&gt;

&lt;p&gt;I wanted the knowledge itself to be part of the product.&lt;/p&gt;

&lt;p&gt;For example, Unscript needs to understand that transforming an article is different from transforming a short message. It also needs to know what tone is being requested, which writing patterns should be avoided, which parts of the original text must remain intact, and what level of transformation the user selected.&lt;/p&gt;

&lt;p&gt;That information is modeled separately in Sanity.&lt;/p&gt;

&lt;p&gt;The Knowledge Base contains structured categories for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing Patterns&lt;/li&gt;
&lt;li&gt;Content Types&lt;/li&gt;
&lt;li&gt;Humanization Levels&lt;/li&gt;
&lt;li&gt;Tone Rules&lt;/li&gt;
&lt;li&gt;Transformation Rules&lt;/li&gt;
&lt;li&gt;Preservation Rules&lt;/li&gt;
&lt;li&gt;Sources&lt;/li&gt;
&lt;li&gt;User Decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives the agent something much more useful than a large collection of unstructured instructions.&lt;/p&gt;

&lt;p&gt;It can retrieve the relevant pieces of knowledge for the specific transformation it is performing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Agent Workflow
&lt;/h2&gt;

&lt;p&gt;When a user runs the humanization flow, Unscript does not immediately send the text to Gemini.&lt;/p&gt;

&lt;p&gt;It first builds the context required for the transformation.&lt;/p&gt;

&lt;p&gt;The agent goes through several stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Analyze the input
       ↓
2. Classify the content
       ↓
3. Determine the requested transformation level
       ↓
4. Retrieve relevant knowledge from Sanity
       ↓
5. Transform the text
       ↓
6. Validate the result
       ↓
7. Display the result and knowledge used
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation was important to me because it makes the system easier to reason about.&lt;/p&gt;

&lt;p&gt;The model handles the language transformation, while Sanity provides the structured rules and knowledge that guide that transformation.&lt;/p&gt;




&lt;p&gt;The main flow includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Unscript
  ├── Inspect Knowledge
  ├── Inspect Environment
  ├── Help
  └── Humanize Text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inspect Knowledge
&lt;/h3&gt;

&lt;p&gt;The first part of the demo shows the knowledge available to the agent.&lt;/p&gt;

&lt;p&gt;Unscript connects to the Sanity Context MCP endpoint and retrieves structured knowledge from the Sanity Knowledge Base.&lt;/p&gt;

&lt;p&gt;The output shows information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge rules&lt;/li&gt;
&lt;li&gt;Writing patterns&lt;/li&gt;
&lt;li&gt;Sources&lt;/li&gt;
&lt;li&gt;Preservation rules&lt;/li&gt;
&lt;li&gt;Provenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The demo then switches to Sanity Studio to show where that structured content actually lives.&lt;/p&gt;

&lt;p&gt;This was important to demonstrate because the knowledge isn't mocked inside the CLI.&lt;/p&gt;

&lt;p&gt;It exists as real Sanity content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect Environment
&lt;/h3&gt;

&lt;p&gt;The environment inspection checks the pieces required by the application, including the configured Sanity Context MCP connection and Gemini integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Help
&lt;/h3&gt;

&lt;p&gt;The help screen explains the available Unscript commands and how to move through the terminal interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Humanize Text
&lt;/h3&gt;

&lt;p&gt;The main demo then enters the actual transformation workflow.&lt;/p&gt;

&lt;p&gt;I select:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content Type → Article
Tone → Friendly
Transformation → Custom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unscript asks for the text, retrieves the relevant knowledge through Sanity Context MCP, sends the transformation task to Gemini 3.1 Flash-Lite, validates the result, and displays the final output.&lt;/p&gt;

&lt;p&gt;The result also exposes the knowledge that influenced the transformation instead of simply showing a new paragraph and hiding everything that happened behind it.&lt;/p&gt;

&lt;p&gt;For the demonstrated run, the retrieved context included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9 rules&lt;/li&gt;
&lt;li&gt;7 writing patterns&lt;/li&gt;
&lt;li&gt;3 sources&lt;/li&gt;
&lt;li&gt;4 preservation rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;along with the transformed result and provenance information.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Used Sanity
&lt;/h2&gt;

&lt;p&gt;Sanity is the knowledge layer of Unscript.&lt;/p&gt;

&lt;p&gt;I created a Sanity project called:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unscript Knowledge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The structured content is stored in the &lt;code&gt;production&lt;/code&gt; dataset.&lt;/p&gt;

&lt;p&gt;The project contains schemas for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;writingPattern
contentType
humanizationLevel
toneRule
transformationRule
preservationRule
source
userDecision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These schemas let the knowledge remain structured instead of becoming one large prompt.&lt;/p&gt;

&lt;p&gt;For example, a transformation rule can exist as its own piece of knowledge, while a preservation rule can independently describe something that must not be changed.&lt;/p&gt;

&lt;p&gt;Sources are also represented separately so retrieved knowledge can retain provenance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sanity Context MCP
&lt;/h2&gt;

&lt;p&gt;The most important part of the Sanity integration is the &lt;strong&gt;Sanity Context MCP endpoint&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Unscript connects to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.sanity.io/v1/context/organizations/o8io0s3zz/mcp/unscript-knowledge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent establishes an MCP session and performs the required MCP initialization flow.&lt;/p&gt;

&lt;p&gt;The runtime sequence includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;initialize
    ↓
notifications/initialized
    ↓
initial_context
    ↓
tools/list
    ↓
groq_query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;groq_query&lt;/code&gt; capability is then used to retrieve the relevant structured knowledge.&lt;/p&gt;

&lt;p&gt;This means the agent isn't simply querying a local JSON file or a hard-coded array.&lt;/p&gt;

&lt;p&gt;The knowledge comes through Sanity's Context MCP layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Structured Content Matters Here
&lt;/h2&gt;

&lt;p&gt;This is probably the most important part of the project.&lt;/p&gt;

&lt;p&gt;A normal keyword search might find a phrase such as "make writing more conversational."&lt;/p&gt;

&lt;p&gt;But Unscript needs more context than that.&lt;/p&gt;

&lt;p&gt;It needs to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What type of content is being transformed?&lt;/li&gt;
&lt;li&gt;What tone was selected?&lt;/li&gt;
&lt;li&gt;What transformation level was requested?&lt;/li&gt;
&lt;li&gt;Which patterns should be changed?&lt;/li&gt;
&lt;li&gt;Which patterns should be preserved?&lt;/li&gt;
&lt;li&gt;Which rules apply to this particular type of writing?&lt;/li&gt;
&lt;li&gt;Where did the rule come from?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is where structured content becomes useful.&lt;/p&gt;

&lt;p&gt;Instead of treating knowledge as a flat document, Unscript can retrieve different pieces of related knowledge and use them together.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Article
  +
Friendly Tone
  +
Selected Humanization Level
  +
Transformation Rules
  +
Preservation Rules
  +
Writing Patterns
  +
Source Information
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;becomes the context used for the transformation.&lt;/p&gt;

&lt;p&gt;That is the part of the project that would be difficult to reproduce with a simple keyword search.&lt;/p&gt;




&lt;h2&gt;
  
  
  Knowledge Base
&lt;/h2&gt;

&lt;p&gt;The initial Knowledge Base is populated with structured content across the different schemas.&lt;/p&gt;

&lt;p&gt;The current knowledge set contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sources                  3
Content Types            8
Humanization Levels      5
Tone Rules               8
Transformation Rules    14
Preservation Rules      10
Writing Patterns        10
User Decisions           0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives the agent a deliberately separated knowledge model rather than one giant prompt.&lt;/p&gt;

&lt;p&gt;The sources include established writing guidance such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;U.S. Digital.gov / GSA plain-language guidance&lt;/li&gt;
&lt;li&gt;Microsoft Writing Style Guide&lt;/li&gt;
&lt;li&gt;Google writing guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not to copy these sources into one enormous instruction block.&lt;/p&gt;

&lt;p&gt;Instead, relevant ideas were modeled into structured knowledge that the agent can retrieve and apply.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gemini 3.1 Flash-Lite
&lt;/h2&gt;

&lt;p&gt;Gemini 3.1 Flash-Lite handles the actual language transformation.&lt;/p&gt;

&lt;p&gt;Sanity provides the context.&lt;/p&gt;

&lt;p&gt;Gemini performs the transformation.&lt;/p&gt;

&lt;p&gt;Unscript then validates the result before presenting it.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sanity
  =
What should guide the transformation?

Gemini
  =
How should the text be transformed?

Unscript
  =
Did the result follow the required constraints?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keeping those responsibilities separate made the architecture much easier to control.&lt;/p&gt;




&lt;h2&gt;
  
  
  Validation
&lt;/h2&gt;

&lt;p&gt;The transformation does not end when Gemini returns text.&lt;/p&gt;

&lt;p&gt;Unscript performs deterministic validation after the model response.&lt;/p&gt;

&lt;p&gt;This gives the application a second layer between the model and the final terminal output.&lt;/p&gt;

&lt;p&gt;The validation stage checks the result against the requirements established by the agent and the retrieved knowledge.&lt;/p&gt;

&lt;p&gt;This was especially important for preservation rules.&lt;/p&gt;

&lt;p&gt;A writing transformation should not accidentally remove information simply because the model thinks the sentence sounds better.&lt;/p&gt;

&lt;p&gt;The agent therefore treats transformation and preservation as separate concerns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Provenance
&lt;/h2&gt;

&lt;p&gt;Another part I wanted to expose was &lt;strong&gt;where the knowledge came from&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The retrieved context is not presented as mysterious model knowledge.&lt;/p&gt;

&lt;p&gt;The result can show the sources and knowledge used by the agent.&lt;/p&gt;

&lt;p&gt;This creates a clearer chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source
  ↓
Structured Sanity Knowledge
  ↓
Sanity Context MCP
  ↓
Agent Retrieval
  ↓
Gemini Transformation
  ↓
Validation
  ↓
Final Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That makes the application easier to inspect and debug.&lt;/p&gt;

&lt;p&gt;It also makes the Sanity integration meaningful rather than decorative.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Terminal Experience
&lt;/h2&gt;

&lt;p&gt;I intentionally built Unscript as a CLI.&lt;/p&gt;

&lt;p&gt;The reason is simple: I wanted the tool to feel like something a developer could actually use from a terminal rather than another generic AI webpage.&lt;/p&gt;

&lt;p&gt;The interface includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interactive command navigation&lt;/li&gt;
&lt;li&gt;Human-readable status information&lt;/li&gt;
&lt;li&gt;Environment inspection&lt;/li&gt;
&lt;li&gt;Knowledge inspection&lt;/li&gt;
&lt;li&gt;Interactive transformation flow&lt;/li&gt;
&lt;li&gt;Structured result output&lt;/li&gt;
&lt;li&gt;Retrieved knowledge information&lt;/li&gt;
&lt;li&gt;Validation information&lt;/li&gt;
&lt;li&gt;Clean handling of terminal input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also spent time fixing edge cases around terminal input.&lt;/p&gt;

&lt;p&gt;For example, partial-line &lt;code&gt;Ctrl+D&lt;/code&gt; handling and the interaction between editing, backspacing, and the prompt needed to be handled properly.&lt;/p&gt;

&lt;p&gt;Those details are easy to ignore when building a demo, but they matter when the application is actually being used from a terminal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Architecture
&lt;/h2&gt;

&lt;p&gt;The complete architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────┐
│          User                │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│       Unscript CLI           │
│                              │
│  commands / prompts / UI     │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│       Unscript Agent         │
│                              │
│ analyze                       │
│ classify                      │
│ select level                  │
│ retrieve knowledge            │
│ transform                     │
│ validate                      │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│      Sanity Context MCP      │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│     Unscript Knowledge       │
│                              │
│ writing patterns             │
│ content types                │
│ humanization levels          │
│ tone rules                   │
│ transformation rules         │
│ preservation rules           │
│ sources                      │
│ user decisions               │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│    Gemini 3.1 Flash-Lite     │
│                              │
│   language transformation    │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│       Validation             │
│                              │
│   deterministic checks       │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│       Final CLI Result       │
│                              │
│ transformed text             │
│ retrieved knowledge          │
│ provenance                   │
│ validation                   │
└──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;p&gt;Unscript is built as a TypeScript CLI.&lt;/p&gt;

&lt;p&gt;The project was developed around a few principles:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Knowledge should live outside the model
&lt;/h3&gt;

&lt;p&gt;Writing rules are structured in Sanity rather than being permanently embedded in the application prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Retrieval should be inspectable
&lt;/h3&gt;

&lt;p&gt;The agent should be able to show what it retrieved and where that knowledge came from.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Transformation should be separate from validation
&lt;/h3&gt;

&lt;p&gt;The model generates the transformation, but deterministic application logic is responsible for checking the result.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The CLI should be usable on its own
&lt;/h3&gt;

&lt;p&gt;The terminal experience is part of the product rather than just a debugging interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Real services should be used in the demo
&lt;/h3&gt;

&lt;p&gt;The Sanity project, Sanity Context MCP endpoint, and Gemini integration are real parts of the runtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;I did not want the project to only work for the exact demo recording.&lt;/p&gt;

&lt;p&gt;The project went through separate checks during development, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript compilation&lt;/li&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Production build&lt;/li&gt;
&lt;li&gt;CLI runtime checks&lt;/li&gt;
&lt;li&gt;Sanity schema validation&lt;/li&gt;
&lt;li&gt;MCP initialization&lt;/li&gt;
&lt;li&gt;Knowledge retrieval&lt;/li&gt;
&lt;li&gt;Gemini integration&lt;/li&gt;
&lt;li&gt;Transformation flow&lt;/li&gt;
&lt;li&gt;Deterministic validation&lt;/li&gt;
&lt;li&gt;Terminal input edge cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final project reached a clean test/build state with the complete end-to-end flow working against the real Sanity Context MCP integration.&lt;/p&gt;




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

&lt;p&gt;The biggest thing I learned from building Unscript is that structured content changes how an agent can be designed.&lt;/p&gt;

&lt;p&gt;It is tempting to put everything into one prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here are some rules.
Now transform this text.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That can work for a small prototype.&lt;/p&gt;

&lt;p&gt;But once the rules become more complex, the prompt becomes the application.&lt;/p&gt;

&lt;p&gt;That was exactly what I wanted to avoid.&lt;/p&gt;

&lt;p&gt;With Sanity, the knowledge becomes something that can be modeled, inspected, changed, queried, and reused.&lt;/p&gt;

&lt;p&gt;The agent can then treat that knowledge as an external system rather than a giant hard-coded instruction.&lt;/p&gt;

&lt;p&gt;That separation makes the whole application easier to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Sanity Is Actually Part of the Product
&lt;/h2&gt;

&lt;p&gt;I did not use Sanity simply because the challenge required a Sanity project.&lt;/p&gt;

&lt;p&gt;If Sanity were removed from Unscript, the architecture would lose an important part of its purpose.&lt;/p&gt;

&lt;p&gt;The application depends on structured knowledge for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content classification&lt;/li&gt;
&lt;li&gt;Humanization levels&lt;/li&gt;
&lt;li&gt;Tone selection&lt;/li&gt;
&lt;li&gt;Transformation rules&lt;/li&gt;
&lt;li&gt;Preservation rules&lt;/li&gt;
&lt;li&gt;Writing patterns&lt;/li&gt;
&lt;li&gt;Source information&lt;/li&gt;
&lt;li&gt;Knowledge retrieval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is therefore not the entire product.&lt;/p&gt;

&lt;p&gt;The knowledge layer is part of the product.&lt;/p&gt;

&lt;p&gt;That is the main reason I chose Path One.&lt;/p&gt;




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

&lt;p&gt;&lt;a href="https://github.com/maisamabbas0323/unscript.git" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/unscript.git&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sanity Project
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Project ID: b209xsoi
Dataset: production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sanity Context MCP
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.sanity.io/v1/context/organizations/o8io0s3zz/mcp/unscript-knowledge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;a href="https://youtube.com/watch?v=ZopcANma17Q%5C&amp;amp;si=jhlLzNV6l999JFDY" rel="noopener noreferrer"&gt;https://youtube.com/watch?v=ZopcANma17Q\&amp;amp;si=jhlLzNV6l999JFDY&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Project: Unscript Knowledge
Project ID: b209xsoi
Dataset: production
Organization: o8io0s3zz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Sanity Studio contains the schemas and structured documents used by the agent's Knowledge Base.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Unscript started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if a writing agent did not have to keep all of its knowledge inside the model?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The result became a terminal application where Sanity acts as the structured knowledge layer, Sanity Context MCP connects that knowledge to the agent, Gemini 3.1 Flash-Lite performs the language transformation, and Unscript validates and presents the result.&lt;/p&gt;

&lt;p&gt;The interesting part for me is not simply that the application can rewrite text.&lt;/p&gt;

&lt;p&gt;It is that the reasoning context behind the transformation can be structured, queried, inspected, and connected back to its sources.&lt;/p&gt;

&lt;p&gt;That is what I wanted to explore with the Sanity Challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sanity&lt;/li&gt;
&lt;li&gt;Sanity Content Lake&lt;/li&gt;
&lt;li&gt;Sanity Context MCP&lt;/li&gt;
&lt;li&gt;Sanity Studio&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Gemini 3.1 Flash-Lite&lt;/li&gt;
&lt;li&gt;MCP&lt;/li&gt;
&lt;li&gt;GROQ&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Terminal CLI&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Challenge
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sanity Challenge — Path One: Ship an Agent That Queries Real Content&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
    <item>
      <title>Doneehub - Weekenchallenge Submission</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Sat, 05 Sep 2026 12:52:17 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/doneehub-weekenchallenge-submission-3ipj</link>
      <guid>https://dev.to/maisamabbas0323/doneehub-weekenchallenge-submission-3ipj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Turn what you have into what someone needs.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Doneehub is a people-first generosity platform built around a simple idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You already have something that can help. Doneehub helps you figure out what that something could become.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Generosity is often presented as if it starts with money. In reality, people have many other resources: time, technical skills, knowledge, transportation, food, unused items, professional experience, or simply the willingness to help.&lt;/p&gt;

&lt;p&gt;Doneehub brings those resources together and turns them into practical possibilities.&lt;/p&gt;

&lt;p&gt;The heart of the project is the &lt;strong&gt;Generosity Compiler&lt;/strong&gt;. A user can describe what they have—for example, an old laptop and technical skills, a few free hours and transportation, or a small amount of money and limited time. Doneehub then interprets that combination and helps turn it into realistic action ideas, requirements, and next steps.&lt;/p&gt;

&lt;p&gt;The project also includes &lt;strong&gt;GoogleHelp&lt;/strong&gt;, a general-purpose Gemini workspace that can help with questions, explanations, writing, rewriting, planning, learning, brainstorming, analysis, and problem solving.&lt;/p&gt;

&lt;p&gt;The goal was not to build another social feed filled with invented activity or impressive-looking numbers. I wanted to build something quieter and more useful: a tool that helps a person move from &lt;strong&gt;intention to action&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://doneehub.vercel.app/" rel="noopener noreferrer"&gt;https://doneehub.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/maisamabbas0323/doneehub" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/doneehub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Doneehub is built as a local-first web application. The repository contains the frontend, Gemini integration, UI components, reusable services, and project configuration.&lt;/p&gt;


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

&lt;p&gt;I wanted the technical architecture to stay simple enough that the product itself could remain the focus.&lt;/p&gt;

&lt;p&gt;Doneehub does not require authentication and does not use a database. User preferences and configuration are kept locally in the browser.&lt;/p&gt;

&lt;p&gt;The application follows a simple flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Doneehub
   |
   +-- GoogleHelp
   |      |
   |      +-- User's Gemini API Key
   |                   |
   |                   v
   |             Google Gemini API
   |
   +-- Local Browser State
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  One Gemini Configuration
&lt;/h3&gt;

&lt;p&gt;Rather than asking users to configure an API key separately for every feature, Doneehub uses one centralized Gemini configuration.&lt;/p&gt;

&lt;p&gt;The user enters their Gemini API key through GoogleHelp. The key is stored locally, masked after saving, and can be tested, replaced, or removed.&lt;/p&gt;

&lt;p&gt;A shared Gemini client/service is responsible for the communication layer so that Gemini-powered features behave consistently throughout the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generosity Compiler
&lt;/h3&gt;

&lt;p&gt;The Generosity Compiler was the main product idea I wanted to explore.&lt;/p&gt;

&lt;p&gt;Instead of starting with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What should I donate?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;it starts with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What do I already have?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user can combine different resources and constraints. Gemini interprets the combination and produces practical possibilities rather than simply returning a generic list of charities.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resources:
- Old laptop
- Web development skills
- 4 hours available each weekend

Goal:
- Help someone learn technology
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result can become a structured set of possible directions, action steps, things to verify, and practical considerations.&lt;/p&gt;

&lt;p&gt;The important distinction is that generated ideas are not presented as verified real-world opportunities unless supporting information actually exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  GoogleHelp
&lt;/h3&gt;

&lt;p&gt;GoogleHelp is the broader Gemini workspace inside Doneehub.&lt;/p&gt;

&lt;p&gt;It supports normal conversation and useful everyday tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explaining difficult concepts&lt;/li&gt;
&lt;li&gt;Rewriting text&lt;/li&gt;
&lt;li&gt;Summarizing user-provided material&lt;/li&gt;
&lt;li&gt;Brainstorming ideas&lt;/li&gt;
&lt;li&gt;Planning projects&lt;/li&gt;
&lt;li&gt;Learning assistance&lt;/li&gt;
&lt;li&gt;Coding questions&lt;/li&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;li&gt;Writing and editing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted it to feel like a workspace rather than a stereotypical chatbot screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proper Markdown Rendering
&lt;/h3&gt;

&lt;p&gt;One small but important detail was the presentation of Gemini responses.&lt;/p&gt;

&lt;p&gt;Instead of showing raw text such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Heading
**important text**
- first item
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Doneehub renders the Markdown into readable interface content.&lt;/p&gt;

&lt;p&gt;The renderer supports headings, emphasis, lists, links, blockquotes, code, tables, and other common Markdown structures while sanitizing unsafe content.&lt;/p&gt;

&lt;p&gt;This makes generated information much easier to scan and actually use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Information, Not Fake Data
&lt;/h3&gt;

&lt;p&gt;A major design decision was to avoid fabricating the world around the user.&lt;/p&gt;

&lt;p&gt;Doneehub does not create fake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Organizations&lt;/li&gt;
&lt;li&gt;Beneficiaries&lt;/li&gt;
&lt;li&gt;Donation totals&lt;/li&gt;
&lt;li&gt;Testimonials&lt;/li&gt;
&lt;li&gt;Events&lt;/li&gt;
&lt;li&gt;Opportunities&lt;/li&gt;
&lt;li&gt;Locations&lt;/li&gt;
&lt;li&gt;Impact statistics&lt;/li&gt;
&lt;li&gt;Verification claims&lt;/li&gt;
&lt;li&gt;Live prices&lt;/li&gt;
&lt;li&gt;Availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When current information is needed, it should come from a trustworthy public source or API. Gemini can then help interpret or organize that information, but generated text is not treated as proof that something exists.&lt;/p&gt;

&lt;p&gt;That distinction became one of the most important principles of the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Google AI
&lt;/h3&gt;

&lt;p&gt;Doneehub is submitted for &lt;strong&gt;Best Use of Google AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google Gemini is not used as a decorative chatbot added to the application. It is part of the core interaction model.&lt;/p&gt;

&lt;p&gt;The Generosity Compiler depends on Gemini to interpret combinations of resources and turn them into practical contribution ideas.&lt;/p&gt;

&lt;p&gt;GoogleHelp provides a broader Gemini workspace for reasoning, explanation, writing, planning, learning, and problem solving.&lt;/p&gt;

&lt;p&gt;The application also uses structured responses where predictable application data benefits from them, while normal conversational responses can remain natural Markdown.&lt;/p&gt;

&lt;p&gt;The important part is that Gemini is used to solve an actual product problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can we help someone understand how their existing resources could become useful to another person?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes Doneehub Different
&lt;/h2&gt;

&lt;p&gt;There are many platforms that tell people where to donate.&lt;/p&gt;

&lt;p&gt;Doneehub starts one step earlier.&lt;/p&gt;

&lt;p&gt;It asks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you have?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maybe the answer is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two free hours.&lt;/li&gt;
&lt;li&gt;A working laptop you no longer use.&lt;/li&gt;
&lt;li&gt;A car.&lt;/li&gt;
&lt;li&gt;Knowledge about accounting.&lt;/li&gt;
&lt;li&gt;A kitchen that can prepare extra food.&lt;/li&gt;
&lt;li&gt;Programming skills.&lt;/li&gt;
&lt;li&gt;A willingness to teach.&lt;/li&gt;
&lt;li&gt;A small amount of money.&lt;/li&gt;
&lt;li&gt;Professional experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those things can have value even when they do not look like traditional donations.&lt;/p&gt;

&lt;p&gt;Doneehub is designed to help users discover that value and turn it into an actionable next step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Design Direction
&lt;/h2&gt;

&lt;p&gt;The visual design deliberately avoids the familiar “AI product” aesthetic.&lt;/p&gt;

&lt;p&gt;Instead, Doneehub uses a calm editorial direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Near-black backgrounds&lt;/li&gt;
&lt;li&gt;Warm off-white typography&lt;/li&gt;
&lt;li&gt;Muted gray supporting text&lt;/li&gt;
&lt;li&gt;Restrained warm accent color&lt;/li&gt;
&lt;li&gt;Strong typography and hierarchy&lt;/li&gt;
&lt;li&gt;Compact navigation&lt;/li&gt;
&lt;li&gt;Subtle borders&lt;/li&gt;
&lt;li&gt;Purposeful whitespace&lt;/li&gt;
&lt;li&gt;Minimal motion&lt;/li&gt;
&lt;li&gt;Responsive layouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are no unnecessary AI badges, glowing gradients, robots, holograms, neon effects, fake dashboards, or invented social activity.&lt;/p&gt;

&lt;p&gt;The intention is for Doneehub to feel like a real product made for people—not a collection of AI-generated screens.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges I Ran Into
&lt;/h2&gt;

&lt;p&gt;The hardest part was not making Gemini return text.&lt;/p&gt;

&lt;p&gt;The harder question was deciding &lt;strong&gt;what the application could honestly claim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A generosity product can easily become misleading if generated suggestions are presented as verified opportunities. It can also become superficial if it fills the interface with fake impact statistics, fictional beneficiaries, or invented success stories.&lt;/p&gt;

&lt;p&gt;I therefore treated the boundary between &lt;strong&gt;generated assistance&lt;/strong&gt; and &lt;strong&gt;verified information&lt;/strong&gt; as a product requirement rather than an afterthought.&lt;/p&gt;

&lt;p&gt;Another challenge was making the Gemini integration useful without turning every screen into a chatbot.&lt;/p&gt;

&lt;p&gt;That led to the Generosity Compiler: a focused workflow where Gemini has a clear job and the output is directly connected to something the user can act on.&lt;/p&gt;




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

&lt;p&gt;The project reinforced a simple lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good AI product design is often less about generating more and more about helping users make better decisions with what is generated.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The useful part of Gemini is not simply that it can produce an answer. The useful part is that it can help connect pieces of information that a person already has and turn them into a clearer plan.&lt;/p&gt;

&lt;p&gt;That became the guiding idea behind Doneehub.&lt;/p&gt;




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

&lt;p&gt;There is a lot more that could be built on top of this foundation.&lt;/p&gt;

&lt;p&gt;Some possible next steps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More resource combinations&lt;/li&gt;
&lt;li&gt;Better structured generosity plans&lt;/li&gt;
&lt;li&gt;More trustworthy public-source integrations&lt;/li&gt;
&lt;li&gt;Stronger source traceability&lt;/li&gt;
&lt;li&gt;More localized opportunities&lt;/li&gt;
&lt;li&gt;Better planning workflows&lt;/li&gt;
&lt;li&gt;Additional accessibility improvements&lt;/li&gt;
&lt;li&gt;Stronger validation for structured Gemini responses&lt;/li&gt;
&lt;li&gt;More offline-friendly functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is intentionally simple so these capabilities can be added without turning the product into an unnecessarily complicated platform.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Google Gemini API&lt;/li&gt;
&lt;li&gt;Browser-local storage/state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact package versions and available scripts are defined in the repository's &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Running Locally
&lt;/h2&gt;

&lt;p&gt;Clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/maisamabbas0323/doneehub.git
&lt;span class="nb"&gt;cd &lt;/span&gt;doneehub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the repository's configured scripts differ, &lt;code&gt;package.json&lt;/code&gt; is the authoritative source.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gemini Configuration
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;GoogleHelp&lt;/strong&gt; inside Doneehub and configure a Gemini API key.&lt;/p&gt;

&lt;p&gt;The application is designed around a user-provided key rather than a project-owned secret.&lt;/p&gt;

&lt;p&gt;For security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never commit API keys.&lt;/li&gt;
&lt;li&gt;Never hardcode secrets.&lt;/li&gt;
&lt;li&gt;Never place keys in URLs.&lt;/li&gt;
&lt;li&gt;Never log keys.&lt;/li&gt;
&lt;li&gt;Never include keys in screenshots or documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the key is used client-side, it should be treated accordingly and managed by the user.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy and Architecture
&lt;/h2&gt;

&lt;p&gt;Doneehub intentionally has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No authentication&lt;/li&gt;
&lt;li&gt;No user accounts&lt;/li&gt;
&lt;li&gt;No application database&lt;/li&gt;
&lt;li&gt;No Supabase&lt;/li&gt;
&lt;li&gt;No project-owned secret API key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product is local-first wherever practical.&lt;/p&gt;

&lt;p&gt;This keeps the architecture lightweight and makes the core experience understandable: the user brings their resources, their intentions, and their Gemini configuration; Doneehub helps turn those inputs into useful possibilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Doneehub is released under the MIT License.&lt;/p&gt;

&lt;p&gt;See &lt;code&gt;LICENSE&lt;/code&gt; for the complete license text.&lt;/p&gt;




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

&lt;p&gt;&lt;a href="https://github.com/maisamabbas0323/doneehub" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/doneehub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission Note
&lt;/h2&gt;

&lt;p&gt;This project was built for the &lt;strong&gt;Weekend Challenge: Generosity Edition&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The central idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Turn what you have into what someone needs.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>weekendchallenge</category>
      <category>donation</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Doneehub</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Sat, 05 Sep 2026 12:48:12 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/doneehub-4k71</link>
      <guid>https://dev.to/maisamabbas0323/doneehub-4k71</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Turn what you have into what someone needs.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Doneehub is a people-first generosity platform built around a simple idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You already have something that can help. Doneehub helps you figure out what that something could become.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Generosity is often presented as if it starts with money. In reality, people have many other resources: time, technical skills, knowledge, transportation, food, unused items, professional experience, or simply the willingness to help.&lt;/p&gt;

&lt;p&gt;Doneehub brings those resources together and turns them into practical possibilities.&lt;/p&gt;

&lt;p&gt;The heart of the project is the &lt;strong&gt;Generosity Compiler&lt;/strong&gt;. A user can describe what they have—for example, an old laptop and technical skills, a few free hours and transportation, or a small amount of money and limited time. Doneehub then interprets that combination and helps turn it into realistic action ideas, requirements, and next steps.&lt;/p&gt;

&lt;p&gt;The project also includes &lt;strong&gt;GoogleHelp&lt;/strong&gt;, a general-purpose Gemini workspace that can help with questions, explanations, writing, rewriting, planning, learning, brainstorming, analysis, and problem solving.&lt;/p&gt;

&lt;p&gt;The goal was not to build another social feed filled with invented activity or impressive-looking numbers. I wanted to build something quieter and more useful: a tool that helps a person move from &lt;strong&gt;intention to action&lt;/strong&gt;.&lt;/p&gt;




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

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


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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/maisamabbas0323/doneehub" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/doneehub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Doneehub is built as a local-first web application. The repository contains the frontend, Gemini integration, UI components, reusable services, and project configuration.&lt;/p&gt;


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

&lt;p&gt;I wanted the technical architecture to stay simple enough that the product itself could remain the focus.&lt;/p&gt;

&lt;p&gt;Doneehub does not require authentication and does not use a database. User preferences and configuration are kept locally in the browser.&lt;/p&gt;

&lt;p&gt;The application follows a simple flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Doneehub
   |
   +-- GoogleHelp
   |      |
   |      +-- User's Gemini API Key
   |                   |
   |                   v
   |             Google Gemini API
   |
   +-- Local Browser State
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  One Gemini Configuration
&lt;/h3&gt;

&lt;p&gt;Rather than asking users to configure an API key separately for every feature, Doneehub uses one centralized Gemini configuration.&lt;/p&gt;

&lt;p&gt;The user enters their Gemini API key through GoogleHelp. The key is stored locally, masked after saving, and can be tested, replaced, or removed.&lt;/p&gt;

&lt;p&gt;A shared Gemini client/service is responsible for the communication layer so that Gemini-powered features behave consistently throughout the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generosity Compiler
&lt;/h3&gt;

&lt;p&gt;The Generosity Compiler was the main product idea I wanted to explore.&lt;/p&gt;

&lt;p&gt;Instead of starting with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What should I donate?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;it starts with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What do I already have?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user can combine different resources and constraints. Gemini interprets the combination and produces practical possibilities rather than simply returning a generic list of charities.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resources:
- Old laptop
- Web development skills
- 4 hours available each weekend

Goal:
- Help someone learn technology
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result can become a structured set of possible directions, action steps, things to verify, and practical considerations.&lt;/p&gt;

&lt;p&gt;The important distinction is that generated ideas are not presented as verified real-world opportunities unless supporting information actually exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  GoogleHelp
&lt;/h3&gt;

&lt;p&gt;GoogleHelp is the broader Gemini workspace inside Doneehub.&lt;/p&gt;

&lt;p&gt;It supports normal conversation and useful everyday tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explaining difficult concepts&lt;/li&gt;
&lt;li&gt;Rewriting text&lt;/li&gt;
&lt;li&gt;Summarizing user-provided material&lt;/li&gt;
&lt;li&gt;Brainstorming ideas&lt;/li&gt;
&lt;li&gt;Planning projects&lt;/li&gt;
&lt;li&gt;Learning assistance&lt;/li&gt;
&lt;li&gt;Coding questions&lt;/li&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;li&gt;Writing and editing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted it to feel like a workspace rather than a stereotypical chatbot screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proper Markdown Rendering
&lt;/h3&gt;

&lt;p&gt;One small but important detail was the presentation of Gemini responses.&lt;/p&gt;

&lt;p&gt;Instead of showing raw text such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Heading
**important text**
- first item
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Doneehub renders the Markdown into readable interface content.&lt;/p&gt;

&lt;p&gt;The renderer supports headings, emphasis, lists, links, blockquotes, code, tables, and other common Markdown structures while sanitizing unsafe content.&lt;/p&gt;

&lt;p&gt;This makes generated information much easier to scan and actually use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Information, Not Fake Data
&lt;/h3&gt;

&lt;p&gt;A major design decision was to avoid fabricating the world around the user.&lt;/p&gt;

&lt;p&gt;Doneehub does not create fake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Organizations&lt;/li&gt;
&lt;li&gt;Beneficiaries&lt;/li&gt;
&lt;li&gt;Donation totals&lt;/li&gt;
&lt;li&gt;Testimonials&lt;/li&gt;
&lt;li&gt;Events&lt;/li&gt;
&lt;li&gt;Opportunities&lt;/li&gt;
&lt;li&gt;Locations&lt;/li&gt;
&lt;li&gt;Impact statistics&lt;/li&gt;
&lt;li&gt;Verification claims&lt;/li&gt;
&lt;li&gt;Live prices&lt;/li&gt;
&lt;li&gt;Availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When current information is needed, it should come from a trustworthy public source or API. Gemini can then help interpret or organize that information, but generated text is not treated as proof that something exists.&lt;/p&gt;

&lt;p&gt;That distinction became one of the most important principles of the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Google AI
&lt;/h3&gt;

&lt;p&gt;Doneehub is submitted for &lt;strong&gt;Best Use of Google AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google Gemini is not used as a decorative chatbot added to the application. It is part of the core interaction model.&lt;/p&gt;

&lt;p&gt;The Generosity Compiler depends on Gemini to interpret combinations of resources and turn them into practical contribution ideas.&lt;/p&gt;

&lt;p&gt;GoogleHelp provides a broader Gemini workspace for reasoning, explanation, writing, planning, learning, and problem solving.&lt;/p&gt;

&lt;p&gt;The application also uses structured responses where predictable application data benefits from them, while normal conversational responses can remain natural Markdown.&lt;/p&gt;

&lt;p&gt;The important part is that Gemini is used to solve an actual product problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can we help someone understand how their existing resources could become useful to another person?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes Doneehub Different
&lt;/h2&gt;

&lt;p&gt;There are many platforms that tell people where to donate.&lt;/p&gt;

&lt;p&gt;Doneehub starts one step earlier.&lt;/p&gt;

&lt;p&gt;It asks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you have?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maybe the answer is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two free hours.&lt;/li&gt;
&lt;li&gt;A working laptop you no longer use.&lt;/li&gt;
&lt;li&gt;A car.&lt;/li&gt;
&lt;li&gt;Knowledge about accounting.&lt;/li&gt;
&lt;li&gt;A kitchen that can prepare extra food.&lt;/li&gt;
&lt;li&gt;Programming skills.&lt;/li&gt;
&lt;li&gt;A willingness to teach.&lt;/li&gt;
&lt;li&gt;A small amount of money.&lt;/li&gt;
&lt;li&gt;Professional experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those things can have value even when they do not look like traditional donations.&lt;/p&gt;

&lt;p&gt;Doneehub is designed to help users discover that value and turn it into an actionable next step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Design Direction
&lt;/h2&gt;

&lt;p&gt;The visual design deliberately avoids the familiar “AI product” aesthetic.&lt;/p&gt;

&lt;p&gt;Instead, Doneehub uses a calm editorial direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Near-black backgrounds&lt;/li&gt;
&lt;li&gt;Warm off-white typography&lt;/li&gt;
&lt;li&gt;Muted gray supporting text&lt;/li&gt;
&lt;li&gt;Restrained warm accent color&lt;/li&gt;
&lt;li&gt;Strong typography and hierarchy&lt;/li&gt;
&lt;li&gt;Compact navigation&lt;/li&gt;
&lt;li&gt;Subtle borders&lt;/li&gt;
&lt;li&gt;Purposeful whitespace&lt;/li&gt;
&lt;li&gt;Minimal motion&lt;/li&gt;
&lt;li&gt;Responsive layouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are no unnecessary AI badges, glowing gradients, robots, holograms, neon effects, fake dashboards, or invented social activity.&lt;/p&gt;

&lt;p&gt;The intention is for Doneehub to feel like a real product made for people—not a collection of AI-generated screens.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges I Ran Into
&lt;/h2&gt;

&lt;p&gt;The hardest part was not making Gemini return text.&lt;/p&gt;

&lt;p&gt;The harder question was deciding &lt;strong&gt;what the application could honestly claim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A generosity product can easily become misleading if generated suggestions are presented as verified opportunities. It can also become superficial if it fills the interface with fake impact statistics, fictional beneficiaries, or invented success stories.&lt;/p&gt;

&lt;p&gt;I therefore treated the boundary between &lt;strong&gt;generated assistance&lt;/strong&gt; and &lt;strong&gt;verified information&lt;/strong&gt; as a product requirement rather than an afterthought.&lt;/p&gt;

&lt;p&gt;Another challenge was making the Gemini integration useful without turning every screen into a chatbot.&lt;/p&gt;

&lt;p&gt;That led to the Generosity Compiler: a focused workflow where Gemini has a clear job and the output is directly connected to something the user can act on.&lt;/p&gt;




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

&lt;p&gt;The project reinforced a simple lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good AI product design is often less about generating more and more about helping users make better decisions with what is generated.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The useful part of Gemini is not simply that it can produce an answer. The useful part is that it can help connect pieces of information that a person already has and turn them into a clearer plan.&lt;/p&gt;

&lt;p&gt;That became the guiding idea behind Doneehub.&lt;/p&gt;




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

&lt;p&gt;There is a lot more that could be built on top of this foundation.&lt;/p&gt;

&lt;p&gt;Some possible next steps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More resource combinations&lt;/li&gt;
&lt;li&gt;Better structured generosity plans&lt;/li&gt;
&lt;li&gt;More trustworthy public-source integrations&lt;/li&gt;
&lt;li&gt;Stronger source traceability&lt;/li&gt;
&lt;li&gt;More localized opportunities&lt;/li&gt;
&lt;li&gt;Better planning workflows&lt;/li&gt;
&lt;li&gt;Additional accessibility improvements&lt;/li&gt;
&lt;li&gt;Stronger validation for structured Gemini responses&lt;/li&gt;
&lt;li&gt;More offline-friendly functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is intentionally simple so these capabilities can be added without turning the product into an unnecessarily complicated platform.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Google Gemini API&lt;/li&gt;
&lt;li&gt;Browser-local storage/state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact package versions and available scripts are defined in the repository's &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Running Locally
&lt;/h2&gt;

&lt;p&gt;Clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/maisamabbas0323/doneehub.git
&lt;span class="nb"&gt;cd &lt;/span&gt;doneehub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the repository's configured scripts differ, &lt;code&gt;package.json&lt;/code&gt; is the authoritative source.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gemini Configuration
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;GoogleHelp&lt;/strong&gt; inside Doneehub and configure a Gemini API key.&lt;/p&gt;

&lt;p&gt;The application is designed around a user-provided key rather than a project-owned secret.&lt;/p&gt;

&lt;p&gt;For security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never commit API keys.&lt;/li&gt;
&lt;li&gt;Never hardcode secrets.&lt;/li&gt;
&lt;li&gt;Never place keys in URLs.&lt;/li&gt;
&lt;li&gt;Never log keys.&lt;/li&gt;
&lt;li&gt;Never include keys in screenshots or documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the key is used client-side, it should be treated accordingly and managed by the user.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy and Architecture
&lt;/h2&gt;

&lt;p&gt;Doneehub intentionally has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No authentication&lt;/li&gt;
&lt;li&gt;No user accounts&lt;/li&gt;
&lt;li&gt;No application database&lt;/li&gt;
&lt;li&gt;No Supabase&lt;/li&gt;
&lt;li&gt;No project-owned secret API key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product is local-first wherever practical.&lt;/p&gt;

&lt;p&gt;This keeps the architecture lightweight and makes the core experience understandable: the user brings their resources, their intentions, and their Gemini configuration; Doneehub helps turn those inputs into useful possibilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Doneehub is released under the MIT License.&lt;/p&gt;

&lt;p&gt;See &lt;code&gt;LICENSE&lt;/code&gt; for the complete license text.&lt;/p&gt;




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

&lt;p&gt;&lt;a href="https://github.com/maisamabbas0323/doneehub" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/doneehub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission Note
&lt;/h2&gt;

&lt;p&gt;This project was built for the &lt;strong&gt;Weekend Challenge: Generosity Edition&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The central idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Turn what you have into what someone needs.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Caninography</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Mon, 17 Aug 2026 03:13:42 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/caninography-36g5</link>
      <guid>https://dev.to/maisamabbas0323/caninography-36g5</guid>
      <description>&lt;p&gt;This is a submission for Weekend Challenge: &lt;em&gt;Dog Days Edition&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I built Caninography, a small digital archive for exploring dog breeds from around the world.&lt;/p&gt;

&lt;p&gt;I wanted it to feel more like a digital museum than a normal dog website.&lt;/p&gt;

&lt;p&gt;You can explore breeds, their origins, history, countries, characteristics and connections between them.&lt;/p&gt;

&lt;p&gt;The whole design is dark, clean and visual. I also kept it silent, so there is no distracting audio or player UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/maisamabbas0323/canonigraphy.git" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/canonigraphy.git&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built it with React, Vite and TypeScript.&lt;/p&gt;

&lt;p&gt;For the visual side, I focused a lot on typography, photography, smooth transitions and responsive layouts.&lt;/p&gt;

&lt;p&gt;I also added an interactive world atlas and a constellation-style view to explore breed relationships.&lt;/p&gt;

&lt;p&gt;For the content, I used Google Gemini to help create short and interesting breed information.&lt;/p&gt;

&lt;p&gt;I didn't wanted to make another chatbot. Instead, Gemini stays behind the experience and helps make the archive content more rich while people simply explore it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Google AI
&lt;/h3&gt;

&lt;p&gt;Caninography is submitted for Best Use of Google AI.&lt;/p&gt;

&lt;p&gt;I used Google Gemini to generate concise, breed-specific information based on the archive data.&lt;/p&gt;

&lt;p&gt;The idea was to use AI in the background, not put a chatbot in front of the user.&lt;/p&gt;

&lt;p&gt;Built With&lt;br&gt;
React&lt;br&gt;
Vite&lt;br&gt;
TypeScript&lt;br&gt;
Google Gemini&lt;br&gt;
CSS&lt;br&gt;
SVG&lt;br&gt;
Canvas&lt;/p&gt;

&lt;h2&gt;
  
  
  A Little About The Idea
&lt;/h2&gt;

&lt;p&gt;I always felt dog breed information is mostly shown as simple lists.&lt;/p&gt;

&lt;p&gt;So I thought:&lt;/p&gt;

&lt;p&gt;What if a dog archive felt like a museum?&lt;/p&gt;

&lt;p&gt;That small idea became Caninography.&lt;/p&gt;

&lt;p&gt;A place to explore their stories, origins and history — one breed at a time.&lt;/p&gt;

</description>
      <category>weekendchallenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Beyond The Plate — Every Dish Has a Story | DEV Frontend Challenge</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Wed, 12 Aug 2026 11:57:25 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/beyond-the-plate-every-dish-has-a-story-dev-frontend-challenge-14ll</link>
      <guid>https://dev.to/maisamabbas0323/beyond-the-plate-every-dish-has-a-story-dev-frontend-challenge-14ll</guid>
      <description>&lt;p&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;_&lt;/p&gt;

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

&lt;p&gt;For this challenge I wanted to build something a little different than a traditional recipe or food website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beyond The Plate&lt;/strong&gt; is an editorial-style web experience that explores the stories behind comfort food from around the world. Instead of only showing recipes, it tells where a dish comes from, why people love it, how it became part of a culture, and what makes it special.&lt;/p&gt;

&lt;p&gt;The project currently features &lt;strong&gt;300+ authentic dishes&lt;/strong&gt; from countries across every continent. Each dish includes real historical background, cultural traditions, ingredients, nutrition, cooking instructions, and related dishes to encourage people to keep exploring.&lt;/p&gt;

&lt;p&gt;I spent a lot of time making the interface feel calm and immersive. The goal was to make visitors feel like they were walking through a digital museum instead of scrolling another food website.&lt;/p&gt;

&lt;p&gt;Some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; 300+ authentic dishes from around the world&lt;/li&gt;
&lt;li&gt; Real recipes with ingredients and cooking steps&lt;/li&gt;
&lt;li&gt; Cultural stories and historical background&lt;/li&gt;
&lt;li&gt; Nutrition dashboard with macro breakdowns&lt;/li&gt;
&lt;li&gt; Editorial gallery with authentic food photography&lt;/li&gt;
&lt;li&gt; Fully responsive from mobile to large desktop&lt;/li&gt;
&lt;li&gt; Premium animations using Framer Motion and GSAP&lt;/li&gt;
&lt;li&gt; Built with React, TypeScript and Vite&lt;/li&gt;
&lt;li&gt; Accessibility focused&lt;/li&gt;
&lt;li&gt; Custom design system inspired by museums and editorial magazines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tried to keep everything feeling premium while still being easy to read and explore.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Live Demo
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://beyond-the-plate-seven.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;beyond-the-plate-seven.vercel.app&lt;/span&gt;
          

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


&lt;h3&gt;
  
  
  GitHub Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/maisamabbas0323/beyond-the-plate.git" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/beyond-the-plate.git&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Home
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgaq1vt6djexet81posm1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgaq1vt6djexet81posm1.png" alt="Home Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Discover
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fixnnwesle5jaq6sns5lu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fixnnwesle5jaq6sns5lu.png" alt="Discover Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ### Culture
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvm38crv40pup9va3ph40.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvm38crv40pup9va3ph40.png" alt="Culture Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Nutrition
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu16ta15q9r3fkuxje732.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu16ta15q9r3fkuxje732.png" alt="Nutrition Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Recipes
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6hdhvscy6fp6lgk4o23e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6hdhvscy6fp6lgk4o23e.png" alt="Recipes Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gallery
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffyeofm0dyd9e1nv6q3rm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffyeofm0dyd9e1nv6q3rm.png" alt="Gallery Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  About
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft3zdcebbgsnqqbagc6on.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft3zdcebbgsnqqbagc6on.png" alt="About Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;This project started much smaller.&lt;/p&gt;

&lt;p&gt;At first I only wanted to build a nice landing page for the challenge, but after working on it for a while I kept asking myself, "What if every comfort food could tell its own story?"&lt;/p&gt;

&lt;p&gt;That idea slowly turned into a much bigger project.&lt;/p&gt;

&lt;p&gt;I spent most of my time researching real dishes instead of making things up. I wanted every recipe, every country, and every cultural reference to be authentic. That part actually took longer than building the UI.&lt;/p&gt;

&lt;p&gt;The design also changed many times. I rebuilt the hero section more than once because it never felt quite right. I experimented with different layouts, typography, animations, and colors until everything started feeling like a digital food exhibition instead of a normal website.&lt;/p&gt;

&lt;p&gt;One of my favorite parts was adding the little interactions throughout the site. Small hover effects, smooth scrolling, floating cards, subtle animations, and transitions make the experience feel much more alive without becoming distracting.&lt;/p&gt;

&lt;p&gt;There were definitely a few frustrating moments too. Getting everything responsive across different screen sizes took a lot more work than I expected, and I probably changed the spacing and typography dozens of times before I was happy with it. But looking back, I'm glad I kept improving those details because they made a big difference.&lt;/p&gt;

&lt;p&gt;If I continue working on Beyond The Plate after this challenge, I'd love to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interactive world maps&lt;/li&gt;
&lt;li&gt;multilingual support&lt;/li&gt;
&lt;li&gt;offline PWA support&lt;/li&gt;
&lt;li&gt;more authentic dishes and regional cuisines&lt;/li&gt;
&lt;li&gt;bookmarking and personal collections&lt;/li&gt;
&lt;li&gt;seasonal food collections&lt;/li&gt;
&lt;li&gt;audio stories for every dish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, this was a really fun challenge. It pushed me to think beyond just building another landing page and instead create something that people might actually enjoy exploring.&lt;/p&gt;

&lt;p&gt;Thanks to the DEV community for organizing another great Frontend Challenge. ❤️&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Last Spark</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Sun, 12 Jul 2026 15:38:13 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/the-last-spark-1k3e</link>
      <guid>https://dev.to/maisamabbas0323/the-last-spark-1k3e</guid>
      <description>&lt;h2&gt;
  
  
  The Last Spark - Learn your passion with google ais
&lt;/h2&gt;

&lt;p&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;The Last Spark&lt;/strong&gt;, an AI-powered passion learning web app where users can pick a passion like Cybersecurity, Football, Cooking, Programming, Music, or even create there own custom passion. After selecting a difficulty, Google Gemini generates a complete learning journey with chapters, study notes, timed quizzes, and a final AI report based on the selected passion. My goal was to make learning feel more like playing a game instead of reading long boring articles.&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://the-last-spark.vercel.app/" rel="noopener noreferrer"&gt;https://the-last-spark.vercel.app/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/maisamabbas0323/the-last-spark" rel="noopener noreferrer"&gt;https://github.com/maisamabbas0323/the-last-spark&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The project is built with &lt;strong&gt;React, TypeScript, Vite, Tailwind CSS, Framer Motion&lt;/strong&gt;, and &lt;strong&gt;Google Gemini 3.1 Flash Lite&lt;/strong&gt;. Gemini creates the study content, chapters, questions, explanations, and final reports in real time based on what the user chooses. I spent most of my time making the UI smooth, responsive, and trying to give it a premium gaming feel with animated cards, timers, progress tracking, and reports. There was lot of debugging and redesign during development, but it was really fun to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Best Use of Google AI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for checking out my project. Hope you enjoy it as much as I enjoyed building it 😊&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>An AI-Powered Chess Experience with Google Gemini</title>
      <dc:creator>Maisam Abbas</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:18:18 +0000</pubDate>
      <link>https://dev.to/maisamabbas0323/an-ai-powered-chess-experience-with-google-gemini-58g6</link>
      <guid>https://dev.to/maisamabbas0323/an-ai-powered-chess-experience-with-google-gemini-58g6</guid>
      <description>&lt;h2&gt;
  
  
  Turning a Classic Game into an AI-Powered Experience with Gemini
&lt;/h2&gt;

&lt;p&gt;When I started working on my June Solstice Game Jam project, I knew I didn't want to build just another game.&lt;/p&gt;

&lt;p&gt;I wanted to create something that combined strategy, learning, and artificial intelligence in a way that felt natural and useful.&lt;/p&gt;

&lt;p&gt;Chess immediately came to mind.&lt;/p&gt;

&lt;p&gt;For centuries, chess has been a symbol of intelligence, planning, and decision-making. At the same time, AI has become one of the most exciting technologies of our generation. Combining the two felt like the perfect challenge.&lt;/p&gt;

&lt;p&gt;The result was &lt;strong&gt;Solstice Chess&lt;/strong&gt;, a modern AI-powered chess experience built with Google Gemini.&lt;/p&gt;




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

&lt;p&gt;Solstice Chess is a web-based chess platform that combines traditional chess gameplay with AI-powered analysis and assistance.&lt;/p&gt;

&lt;p&gt;Players can jump into a game, choose a difficulty level, and receive intelligent insights powered by Gemini.&lt;/p&gt;

&lt;p&gt;The goal wasn't simply to build a chess board.&lt;/p&gt;

&lt;p&gt;The goal was to create an experience where players could improve, learn, and understand the reasoning behind moves rather than simply playing against a computer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Interactive chess gameplay&lt;/li&gt;
&lt;li&gt;Multiple AI difficulty levels&lt;/li&gt;
&lt;li&gt;Gemini-powered move analysis&lt;/li&gt;
&lt;li&gt;Position evaluation&lt;/li&gt;
&lt;li&gt;Strategic recommendations&lt;/li&gt;
&lt;li&gt;Modern responsive interface&lt;/li&gt;
&lt;li&gt;Fast browser-based experience&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Project Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Landing Page
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F245m0198eyff6tyytvrf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F245m0198eyff6tyytvrf.png" alt="Landing Page Of Game" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The landing page introduces players to the project through a clean, premium interface inspired by modern AI products.&lt;/p&gt;




&lt;h3&gt;
  
  
  Gameplay Interface
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnd5tsdcifk3xzpd0eoqh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnd5tsdcifk3xzpd0eoqh.png" alt="Solstice Chess Gameplay" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The gameplay screen focuses on clarity and usability while keeping the chessboard at the center of attention.&lt;/p&gt;




&lt;h3&gt;
  
  
  Gemini Integration
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6zqyrzez7g3ic5z18uz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6zqyrzez7g3ic5z18uz.png" alt="Gemini AI Integration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Players can connect Gemini and unlock AI-powered analysis and chess insights.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;One thing I've always found interesting about chess is that beginners often struggle to understand &lt;em&gt;why&lt;/em&gt; a move is good or bad.&lt;/p&gt;

&lt;p&gt;Many chess engines provide evaluations, but they don't always explain their reasoning in a way that's easy to understand.&lt;/p&gt;

&lt;p&gt;That's where Gemini became exciting.&lt;/p&gt;

&lt;p&gt;Instead of only showing moves, Gemini can help explain strategic ideas, identify weaknesses, and provide insights that feel more like guidance than raw calculations.&lt;/p&gt;

&lt;p&gt;I wanted the AI to feel less like an opponent and more like a coach.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Technical Approach
&lt;/h2&gt;

&lt;p&gt;The project was built as a modern web application with a strong focus on user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;The interface was designed around a premium dark theme with clean typography and a distraction-free layout.&lt;/p&gt;

&lt;p&gt;My goal was to create something that felt modern and professional while remaining easy to use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chess Logic
&lt;/h3&gt;

&lt;p&gt;The chess system handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal move validation&lt;/li&gt;
&lt;li&gt;Piece movement&lt;/li&gt;
&lt;li&gt;Turn management&lt;/li&gt;
&lt;li&gt;Difficulty settings&lt;/li&gt;
&lt;li&gt;Board state updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maintaining correct game state was one of the most important parts of development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini AI
&lt;/h3&gt;

&lt;p&gt;Gemini serves as the intelligence layer of the application.&lt;/p&gt;

&lt;p&gt;It can be used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze positions&lt;/li&gt;
&lt;li&gt;Explain moves&lt;/li&gt;
&lt;li&gt;Provide strategic feedback&lt;/li&gt;
&lt;li&gt;Offer educational commentary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This transforms a standard chess game into a learning experience.&lt;/p&gt;




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

&lt;p&gt;Like most projects, things didn't go smoothly from day one.&lt;/p&gt;

&lt;p&gt;One of the biggest challenges was balancing functionality with simplicity.&lt;/p&gt;

&lt;p&gt;I wanted powerful AI features without overwhelming players with information.&lt;/p&gt;

&lt;p&gt;Another challenge was designing an interface that felt modern while keeping the focus on the chessboard itself.&lt;/p&gt;

&lt;p&gt;Several parts of the UI were redesigned multiple times before reaching the final version.&lt;/p&gt;




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

&lt;p&gt;The feature I'm most proud of isn't a single button or screen.&lt;/p&gt;

&lt;p&gt;It's the overall experience.&lt;/p&gt;

&lt;p&gt;I love that a player can open the application, start a game, receive AI insights, and learn something new without needing to install anything or study complicated tools.&lt;/p&gt;

&lt;p&gt;That combination of accessibility and intelligence is exactly what I hoped to achieve.&lt;/p&gt;




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

&lt;p&gt;Building Solstice Chess taught me valuable lessons about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI integration&lt;/li&gt;
&lt;li&gt;Product design&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;Game development&lt;/li&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also reinforced something I've learned repeatedly as a developer:&lt;/p&gt;

&lt;p&gt;The most challenging part of building software isn't always creating features.&lt;/p&gt;

&lt;p&gt;It's creating an experience that feels simple.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;This project is only the beginning.&lt;/p&gt;

&lt;p&gt;Future ideas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiplayer mode&lt;/li&gt;
&lt;li&gt;Game history and replays&lt;/li&gt;
&lt;li&gt;Personalized AI coaching&lt;/li&gt;
&lt;li&gt;Opening explorer&lt;/li&gt;
&lt;li&gt;Advanced analytics&lt;/li&gt;
&lt;li&gt;Cloud synchronization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many directions this project could grow, and I'm excited to continue exploring them.&lt;/p&gt;




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

&lt;p&gt;GitHub Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/abxdev12/solstice-shift" rel="noopener noreferrer"&gt;https://github.com/abxdev12/solstice-shift&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Demo:&lt;/p&gt;


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

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





&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Google AI Usage
&lt;/h3&gt;

&lt;p&gt;Google Gemini plays a central role in Solstice Chess by providing intelligent analysis, strategic feedback, and educational guidance that enhances the traditional chess experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Ode to Alan Turing
&lt;/h3&gt;

&lt;p&gt;Chess and artificial intelligence share a long history together. Solstice Chess celebrates that connection by combining one of humanity's oldest strategy games with modern generative AI technology.&lt;/p&gt;




&lt;p&gt;Thank you for reading and checking out Solstice Chess.&lt;/p&gt;

&lt;p&gt;If you're interested in AI, game development, or chess, I'd love to hear your thoughts and feedback.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
