Human-AI Collaboration: Real Sessions Building FloodBoy
Human-AI Collaboration: Real Sessions Building FloodBoy
Stories from the Trenches - Authentic Development Moments
This is not a polished marketing story. These are real development sessions with actual problems, failures, breakthroughs, and lessons learned while building FloodBoy’s IoT flood monitoring system.
The “worst! why” Moment
July 22, 2025 - 09:40 GMT+7 - 20 minute session
Sometimes the most direct feedback creates the best breakthroughs. The human developer sent a screenshot with just two words: “worst! why”
The blockchain data table was completely unreadable - columns crammed together with zero spacing. What looked like a simple CSS issue revealed deeper problems:
/* The Problem */
table { border-spacing: 0; } /* Broken */
/* The Solution */
table {
border-collapse: collapse;
padding: 1rem 1.5rem; /* Proper spacing */
}
But that was just the beginning. Fixing the table uncovered:
formatAddressundefined errors breaking functionality- CORS issues from external CDN references
- Column ordering that made no sense
The Fix: 20 minutes of systematic problem-solving:
- Fix immediate CSS spacing disaster
- Add transaction hash column (user request)
- Reorder columns logically: Timestamp → Depth → Height → Voltage → Block → Tx Hash
- Fix JavaScript errors preventing page load
- Remove problematic CDN dependencies
Lessons Learned:
- Direct user feedback with visuals (“worst! why” + screenshot) is incredibly valuable
- CSS border models (
border-collapse: separatevscollapse) fundamentally affect padding behavior - Always define utility functions within scope to avoid undefined errors
The Overcomplicated Alias System Journey
July 16, 2025 - 07:00-08:47 GMT+7 - 107 minute session
The Vision: Create SEO-friendly URLs like /blockchain/FloodBoy001 that redirect to actual contract addresses.
First Attempt: Massively overcomplicated static data generation system
- Generate pages at build time
- Embed sensor data directly in HTML
- Complex file manipulation and API calls
The Pivot: Human clarified the actual requirement:
“I want static URLs (for SEO) but dynamic data loading (to avoid stale data)”
The Simple Solution:
// aliases.config.ts - Clean and maintainable
const ALIASES = {
'FloodBoy001': '0x1234...abcd',
'FloodBoy002': '0x5678...efgh',
// ...
};
// Simple redirect logic
for (const [alias, address] of Object.entries(ALIASES)) {
if (params.address === alias) {
return redirect(`/blockchain/${address}`);
}
}
Side Quest: Discovered GitHub CLI was ancient (v2.4.0), upgraded to v2.75.1, learned about gh project link command, set up proper project tracking.
Key Moment: The evolution from a 200-line complex solution to a 20-line elegant one. Sometimes the best code is the code you don’t write.
The Great Table Spacing Disaster Recovery
Real-time problem solving in action
The human’s reaction to broken table layout was immediate and visceral. No technical jargon, just pure user frustration. This led to one of our most efficient debugging sessions:
Before (Broken):
TimestampWaterDepthInstallationHeightBattery
10:30AM1.2m3.0m12.5V
10:31AM1.1m3.0m12.4V
After (Fixed):
| Timestamp | Water Depth | Installation Height | Battery Voltage |
|-----------|-------------|--------------------| ----------------|
| 10:30 AM | 1.2m | 3.0m | 12.5V |
| 10:31 AM | 1.1m | 3.0m | 12.4V |
The Systematic Approach That Worked:
- Address UI disasters first (readability)
- Then enhance functionality (new columns)
- Finally handle data concerns (address mapping)
- Always test, commit, document
The Branding Identity Crisis
July 21, 2025 - 08:45-09:03 GMT+7 - 18 minute session
The Problem: Social media previews showed Astro branding instead of FloodBoy
The Discovery: blog-placeholder-1.jpg contained competitor logos and “Build the web you want” text
The Solution: One line change in BaseHead.astro
<!-- From -->
<meta property="og:image" content={new URL("/blog-placeholder-1.jpg", Astro.url)} />
<!-- To -->
<meta property="og:image" content={new URL("/floodboy-logo.png", Astro.url)} />
Why This Matters: The nnn workflow automatically triggered ccc first since no recent context existed. This documented the issue properly and created a clean audit trail.
Lesson: Always check default assets - frameworks often include branded placeholders that need replacement.
Real Technical Challenges We Solved
Blockchain Performance Optimization
- Challenge: Loading 100 IoT stores took 30+ seconds
- Solution: Implemented multicall patterns reducing load time to 3 seconds
- Impact: Made the app actually usable in production
Three-Tier Sensor Classification
- Challenge: Binary “active/inactive” wasn’t enough
- Solution: Created Active/Offline/Being Installed status with 1-hour threshold
- Result: Much better operational visibility
UI Enhancement Evolution
- Challenge: “The checkboxes are hard to use”
- Solution: Button-style toggles with green theming and visual feedback
- Process: Transform frustrating UX into intuitive interactions
The Development Rhythm That Works
Retrospective-Driven Development
Every session ends with honest reflection:
- What went well? (celebrate wins)
- What could improve? (learn from friction)
- What was blocked? (prevent future issues)
- What was learned? (capture insights)
The nnn Workflow Pattern
nnn- Smart planning that auto-runscccif no recent context- Create detailed implementation plan with technical specs
- Execute in small, testable chunks
- Document everything for continuity
User-Responsive Iteration
- Direct feedback drives immediate fixes
- Screenshots reveal UX problems better than descriptions
- Quick wins build momentum for larger features
Authentic Lessons from the Code
CSS Border Models Matter
border-collapse: separate vs collapse completely changes how padding works. This seems obvious in retrospect, but caused real user pain.
Helper Functions Need Scope
formatAddress undefined broke everything. Always define utility functions where they’re used, or ensure proper imports.
Simple Solutions Win
The alias system went from 200+ lines of complexity to 20 lines of elegance when requirements were clarified.
User Feedback Drives Quality
“worst! why” led to better table design than any technical specification would have.
The Technology Stack (What Actually Works)
Frontend Power Tools
- Astro + React: Static generation with dynamic islands
- TypeScript: Catches errors before they reach users
- Tailwind CSS: Rapid styling that actually scales
Blockchain Integration
- Viem: Modern Web3 with excellent TypeScript support
- Multicall3: Essential for performance at scale
- JIBCHAIN L1: Production blockchain with real IoT data
Development Workflow
- GitHub Projects: Linked to repository for proper tracking
- Retrospective Documentation: Capture lessons while they’re fresh
- Visual Testing: Screenshots reveal UX issues instantly
What This Collaboration Model Achieves
Speed Without Sacrificing Quality
- 18-minute sessions can solve major branding issues
- 20-minute focused work fixes critical UX problems
- 107-minute planning prevents weeks of wrong implementation
Learning That Compounds
- Each session builds on previous insights
- Documentation creates continuity across time gaps
- Honest retrospectives prevent repeating mistakes
User-Centered Results
- Direct feedback creates immediate improvements
- Technical solutions serve real user needs
- Simple approaches often outperform complex ones
This is how real software gets built - through authentic collaboration, honest feedback, systematic problem-solving, and learning from every single session.
These stories come from actual development retrospectives dated July 2025. No marketing polish, just real development moments that created FloodBoy’s IoT monitoring platform.
Built through authentic Human-AI partnership • Powered by JIBCHAIN L1 • Documented for posterity