Project Story
Inspiration
I was inspired by Native.io and TryBloom.ai, but I did not want to add another monthly subscription to my budget.
I knew I could build something with Perplexity, but its credit-based model can become expensive because it uses paid models such as Claude and others. ChatGPT Work had just rolled out, and the building experience was included in my existing ChatGPT Pro workflow, so I decided to see how far I could take the idea.
I already use the OpenAI API for other projects, but I had never tried building an application this way. Brand Forge began as a practical experiment:
Could I use ChatGPT as a development partner to build my own AI-powered brand operating system?
I wanted a tool that could understand a brand before generating content—not another blank prompt box that produces generic marketing copy.
What it does
Brand Forge turns a company’s website and trusted content into a living, reusable Brand DNA.
It reads official sources and organizes what it learns into:
- Brand identity, description, and mission
- Primary audience
- Voice and tone
- Messaging pillars
- Colors, fonts, and visual direction
- Approved public claims
- Claims to avoid
- Required language and guardrails
The owner can review, edit, approve, or use AI to enhance each part. AI suggestions do not automatically become brand truth; the owner decides what is accepted.
Brand Forge then uses the approved Brand DNA to create campaigns for Facebook, Instagram, TikTok, YouTube, Threads, LinkedIn, X, and Pinterest.
Users can:
- Choose a campaign objective
- Begin with an objective-specific suggested brief
- Edit the brief or paste their own information
- Select platforms and platform-native formats
- Request between 1 and 10 versions per format
- Generate captions and visual assets
- Review and approve individual assets
- Save campaigns for future reuse
- Return to a persistent visual asset library
The goal is to help people create faster without sacrificing consistency, credibility, or control.
How we built it
I built Brand Forge with ChatGPT as an active development partner. We worked iteratively: I described the product, tested each deployment, shared screenshots and errors, and refined the application one issue at a time.
The application uses:
- Astro and React for the user interface
- Node.js and TypeScript for the API and background worker
- PostgreSQL for brands, facts, campaigns, keys, and assets
- pg-boss for website-ingestion and generation jobs
- OpenAI models for content intelligence and visual generation
- GitHub for source control, branches, and pull requests
- Railway for hosting, deployment, services, and the database
Brand Forge is divided into four primary services:
- The web application
- The API
- The background worker
- PostgreSQL
The web application sends work to the API. Longer processes, including reading websites and generating visual assets, are placed into queues and completed by the worker. The results are stored in PostgreSQL and made available through the interface.
The code is stored on GitHub. Changes merged into the main branch automatically trigger Railway builds and deployments. This created a practical workflow from conversation to code, pull request, deployment, testing, and refinement.
Challenges we ran into
The greatest challenge was not generating AI content. It was making the complete system reliable.
Reading websites
Some websites returned 403 responses or blocked automated readers. Others relied on JavaScript, external stylesheets, CSS variables, nested imports, or protected assets.
Font detection was especially challenging. The first implementation only recognized simple font-family declarations. We expanded it to support:
- CSS custom properties such as
var(--heading-font) @font-face- Google Fonts and Bunny Fonts
- Nested
@importrules - External stylesheets
- Inline styles
- Browser-like request headers
Managing AI provider keys
Brand Forge stores provider keys in encrypted form. At one point, a configuration change made previously encrypted keys unreadable. We had to identify the authentication problem, remove the invalid records, and register working keys again.
We also discovered places where the application was hard-coded to use one provider even when another provider had the valid key.
Coordinating multiple services
A successful web deployment did not always mean the API or worker had also been updated. Railway service watch paths, build commands, dependency lockfiles, and TypeScript compilation all had to remain aligned.
Some errors were initially hidden because an earlier build step failed before the compiler reached the underlying problem.
Replacing prototypes with real workflows
Several early interface elements looked complete but still contained demo values or placeholder behavior. These included:
- Brand Confidence percentages
- Knowledge and asset counts
- Calendar events
- Status labels
- The visual asset library
- Buttons that did not yet reach an API route
We replaced those values with live data and converted silent failures into clear, actionable error messages.
Preserving the interface while changing the architecture
The first generation of Brand Forge could create visual assets, but the newer interface had a stronger design and better campaign controls. The challenge was to reconnect the original queue-backed generation system without losing the improved user experience.
Accomplishments that we're proud of
I am proud that Brand Forge became a working multi-service application rather than remaining a mockup.
It now includes:
- Source-aware website ingestion
- Editable and owner-approved Brand DNA
- AI Fill and AI Enhance controls
- Brand Confidence calculated from live data
- Website color and font detection
- Public-claim and guardrail management
- Imports from trusted thought-leadership content
- Objective-based campaign suggestions
- Platform-specific content formats
- Multiple versions per format
- AI-generated captions
- AI-generated visual assets
- Campaign approval and persistence
- A persistent visual asset gallery
- Encrypted provider-key storage
- Background job processing
- Robust user-facing error notifications
- Automatic GitHub-to-Railway deployment
The most important accomplishment is that Brand Forge does not treat AI output as automatically correct. It keeps the owner responsible for approving the facts, claims, voice, and creative work that represent the brand.
What we learned
I learned that building with AI is most effective as an iterative collaboration.
ChatGPT could help inspect code, identify failures, propose architecture, implement changes, create pull requests, and respond to production feedback. However, my role remained essential: defining the product, recognizing when behavior did not match the vision, testing the live application, and deciding what should change.
I also learned that trustworthy AI requires more than a good prompt. It needs:
- Reliable source material
- Structured context
- Clear ownership
- Approval workflows
- Versioned data
- Persistent storage
- Guardrails
- Honest error reporting
Another major lesson was that a polished interface creates real expectations. If a button appears to work, it must lead to a complete workflow. If the application displays a percentage or status, that value must come from actual data.
Finally, I learned that Brand DNA should not be a static document. It can be a living system that improves as the owner adds trusted knowledge, approves campaigns, and creates reusable assets.
What's next for Brand Forge
The next stage is to develop Brand Forge into a more complete brand operating system.
Planned improvements include:
- Direct social publishing and scheduling
- A real campaign calendar
- More advanced visual templates
- Video and motion-asset generation
- Collaborative review and approval workflows
- Brand DNA history and version comparison
- Asset editing and regeneration
- Performance analytics
- Learning from approved and successful content
- Automated brand-consistency checks
- Automated claim and guardrail validation
- Deeper integration with Authority Forge and other trusted content sources
Brand Forge is currently hosted on Railway, with its code stored on GitHub and changes deployed automatically after they are merged.
For a custom domain, I may use a subdomain of my existing website. Cloudflare could manage the DNS and provide CNAME flattening where necessary, while Railway continues hosting the application.
What began as an effort to avoid another monthly subscription became something more valuable: proof that one person, working with ChatGPT as a development partner, can turn an idea into a functioning AI product.
Built With
- anthropic
- astro
- byok
- chatgpt-work
- cloudflare
- flux
- github
- macbook-pro-m4
- model:
- node.js/typescript
- openai
- pg-boss
- postgresql
- react
- stack:
Log in or sign up for Devpost to join the conversation.