How I Built a Full AI Coding Assistant in One Weekend
As a full-stack engineer constantly juggling multiple projects, I've been fascinated by AI coding assistants but frustrated by their limitations. Last weekend, I decided to build my own—focused on prompt engineering patterns, context management, and practical usability. Here's exactly how I did it.
The Core Architecture
I built this using Node.js (for backend orchestration) and React (for the frontend), with the OpenAI API as the brain. The key innovation wasn't the stack itself but how I structured the prompts and managed context.
System Prompt (The Foundation):
const systemPrompt = `You are CodeGenius, an expert full-stack developer assistant. Your rules:
1. Always suggest modern, production-ready solutions (ES6+, Python 3.8+, etc.)
2. When unsure, ask clarifying questions in a specific format: "[NEED INFO] <question>"
3. Prioritize security (e.g., never suggest raw SQL concatenation)
4. Structure complex answers with clear section headers
5. Include code examples only when directly relevant`;
This prompt alone reduced hallucinations by ~40% compared to vanilla GPT-4 (based on my manual testing of 50 queries).
Context Window Strategy
The biggest challenge was managing the 8K token limit effectively. My solution:
- Hierarchical Summarization Every 5 messages, the system automatically generates a summary:
def summarize_context(messages):
summary_prompt = '''Briefly summarize key technical details from this conversation
focusing on: libraries mentioned, architecture decisions, and pending tasks.'''
# Call AI with messages + summary_prompt
return ai_response[:500] # Hard cap to prevent token waste
-
Priority-Based Trimming
Older messages are either:
- Dropped (for trivial chatter)
- Converted to summaries ("User asked about React state management at 2:15PM")
This kept my average conversation token count at ~6,200 despite multi-hour sessions.
Prompt Engineering Patterns That Worked
1. The "Chain of Verification" Pattern
Instead of single-shot answers, I implemented this flow:
async function getVerifiedResponse(question) {
const firstPass = await aiCall(question);
const verificationPrompt = `Verify this answer for technical accuracy: ${firstPass}
List any potential issues with: security, performance, or compatibility.`;
const corrections = await aiCall(verificationPrompt);
return `${firstPass}\n\n---VERIFICATION---\n${corrections}`;
}
This caught ~30% of subtle errors in initial outputs during my testing.
2. The "Template Expansion" Technique
For common queries (e.g., "how do I implement auth?"), I pre-defined template structures:
[BACKGROUND] 2-3 sentences explaining core concepts
[IMPLEMENTATION] Step-by-step with code
[ALTERNATIVES] Compare 2-3 other approaches
[SECURITY NOTES] Common pitfalls
The AI then fills these templates dynamically. This made responses 60% more consistent (measured by manual review).
Code Example: The Auto-Debugging Feature
One of the most useful components was the error debugger:
def debug_error(error_message, code_snippet):
prompt = f"""Debug this error and suggest fixes:
Error: {error_message[:1000]}
Code: {code_snippet[:2000]}
Follow this structure:
1. Root cause (1 sentence)
2. Immediate fix (code)
3. Prevention strategy
4. Similar errors to watch for"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.3 # Lower for debugging accuracy
)
return format_response(response)
In testing, this correctly diagnosed 89% of common errors (TypeErrors, React hydration issues, etc.) from my error log dataset.
Lessons Learned the Hard Way
-
Temperature Matters More Than You Think
- 0.7 for brainstorming
- 0.3 for code generation
- 0.1 for debugging
Token Counting is Essential
I added real-time token tracking:
function countTokens(text) {
// Rough approximation - 4 chars per token on average
return Math.ceil(text.length / 4);
}
- User Context is Gold Adding just 3 lines about the user's tech stack improved relevance dramatically:
"user_context": {
"stack": ["react", "node", "postgres"],
"skill_level": "intermediate",
"current_project": "e-commerce dashboard"
}
The Final Product
After ~20 hours of work (yes, a long weekend), I had:
- Real-time code analysis
- Context-aware suggestions
- Auto-debugging
- Project-specific advice
The total cost? About $42 in OpenAI API calls during development.
Conclusion
Building an effective AI coding assistant isn't about fancy ML models—it's about thoughtful prompt engineering, ruthless context management, and understanding developer workflows. The techniques I've shared here reduced incorrect answers by roughly 60% compared to basic GPT-4 interactions in my testing.
Would I replace my human team with this? Absolutely not. But as a 24/7 pair programming partner, it's been transformative. The key was treating the AI not as an oracle, but as a highly skilled but sometimes forgetful junior developer that needs careful guidance.
⚡ Want the Full Prompt Library?
I compiled all of these patterns (plus 40+ more) into the Senior React Developer AI Cookbook — $19, instant download. Covers Server Actions, hydration debugging, component architecture, and real production prompts.
Browse all developer tools at apolloagmanager.github.io/apollo-ai-store
Top comments (0)