We kept losing hours re-creating the same AI IDE setup across machines and tools. Onboarding was inconsistent, secrets leaked too easily, and “it works on my machine” slowed teams. We wanted a portable, privacy-first way to snapshot and share AI IDE environments that “just works.”
What it does
Snapshot: Captures settings, keybindings, extensions, and prompts into a portable .taptik package.
Sanitize: Removes secrets and sensitive data (privacy-by-default).
Validate: Ensures integrity, completeness, and cross-IDE compatibility.
Transform: Maps vendor-specific formats to a unified Taptik schema and back.
Deploy: Restores configurations to Claude Code, Kiro, and Cursor in seconds.
Sync: Uses cloud storage with RLS so teams can share safely.
How we built it
Stack: NestJS CLI with nest-commander; modular services for auth, build, context, deploy, info, supabase, push.
Cloud: Supabase for secure, RLS-backed storage and team sharing.
Quality gates: Typecheck, build, lint/format, and tests on every change.
TDD + strict typing: The push module uses stricter TS settings to prevent whole classes of bugs.
Errors and DX: Categorized error codes and clear progress updates for a smooth CLI UX.
Challenges we ran into
Cross-IDE normalization: Incompatible formats for similar concepts across vendors.
Secret handling: Co-mingled tokens and private prompts required targeted sanitizers.
Edge-case validation: Partial/corrupt exports and missing extensions needed defensive parsing.
Trust and access: Getting cloud sync right with RLS and least-privilege defaults.
User experience: Balancing power with a simple, guided CLI flow.
Accomplishments that we're proud of
One-click restore across Claude Code, Kiro, and Cursor from a single package.
Safe-by-default exports that prevent accidental secret leakage.
Unified schema that cleanly maps to and from vendor formats.
Robust validation with actionable, human-friendly error messages.
Frictionless CLI with progress tracking and consistent developer ergonomics.
Log in or sign up for Devpost to join the conversation.