Real Workflows, Real Results
See how teams use InkPal to ship Flutter apps faster with AI-powered tooling.
Building a Fitness App with FABRICATE
A typical fitness app takes 200+ hours of hand-written Flutter code across dozens of screens, models, and services.
FABRICATE takes a JSON schema describing screens, navigation, and data models, then compiles an entire Flutter app with proper state management (BLoC, Riverpod, or Provider).
120 hours saved
// One command, entire app scaffold
await inkpal.fabricate({
schema: "fitness_tracker.json",
stateManagement: "riverpod",
navigation: "go_router",
includeTests: true
})
// Output: 44 files, 8 modules, fully compiledAutomating QA with Visual Regression
Manual UI testing misses pixel-level regressions. QA teams spend days clicking through screens after every release.
visual_test captures baselines for every screen, then visual_baseline_compare detects regressions down to individual pixels using pixelmatch.
100% screen coverage
// Capture baselines for all routes
await inkpal.visual_test_all({ threshold: 0.1 })
// After code change, compare
await inkpal.visual_baseline_compare({
route: "/home",
tolerance: 0.02
})
// Result: 92.4% match — color regression detectedMulti-Device Testing Across 5 Devices
Testing one device at a time. A single QA pass takes 4 hours across phone, tablet, and web.
devices_discover finds all connected devices, then screenshot_all and compare_all run tests in parallel across every device simultaneously.
5x parallel testing
// Discover all connected devices
const devices = await inkpal.devices_discover()
// => [Pixel 7, iPad Pro, Chrome, iPhone 15, Galaxy S24]
// Launch and screenshot all at once
await inkpal.launch_all({ route: "/dashboard" })
await inkpal.screenshot_all({ compare: true })CI/CD: Auto-Commit, PR, Deploy
Manual deployment pipeline: format, lint, test, commit, push, create PR, wait for checks, merge, deploy. Takes 45 minutes of context switching.
full_ship chains auto_commit, create_pr, pre_merge_gate, and deploy_to_store into a single zero-touch pipeline.
Zero-touch deployment
// One command: commit → PR → gate → deploy
await inkpal.full_ship({
message: "feat: add workout history screen",
target: "production",
runTests: true,
formatCheck: true
})
// Auto: dart format → dart analyze → tests → commit
// → PR → merge gate → deploy to Play StoreFigma to Flutter — the only pipeline that measures itself
Every other tool in this space generates code and stops. You find out whether it actually matches the design by running it, eyeballing it, and patching by hand.
inkpal_figma_audit grades the file first (A–F + fix list). inkpal_figma_screen emits a Scaffold-wrapped widget + theme files + routes. inkpal_figma_converge runs your app through the bridge, pixel-diffs vs the Figma source, and retries with alternate strategies until the gap closes.
Closed-loop convergence — no competitor has this
// 1. Audit before converting
const audit = await mcp.call("inkpal_figma_audit", {
figma_url: "https://figma.com/design/ABC/..."
})
// { grade: "B", score: 68, suggestions: [...] }
// 2. Emit Dart + theme + routes
await mcp.call("inkpal_figma_screen", {
figma_url, require_grade: "B"
})
// 3. Closed-loop refine via inkpal_bridge
await mcp.call("inkpal_figma_converge", {
figma_url, vm_service_url, target_delta_pct: 5
})
// iter 1 → 77% iter 2 → 87% iter 3 → 93% ✓Teaching AI Your Patterns with App DNA
AI generates generic Flutter code that does not match your project's architecture, naming conventions, or state management patterns.
dna_build analyzes your codebase to extract patterns, then dna_query lets AI access your project's DNA before generating any code.
AI follows YOUR patterns
// Build DNA from your codebase
await inkpal.dna_build({
projectPath: "/app",
analyze: ["architecture", "state", "naming", "tests"]
})
// AI queries your patterns before generating
const patterns = await inkpal.dna_query({
question: "How do we structure feature modules?"
})
// Returns: YOUR folder structure, YOUR base classes