A delightful educational app for children to learn letter tracing with fun, interactive tools.
- Smooth letter tracing with path validation
- Real-time progress tracking
- Celebration animations and haptic feedback
- Tiko the turtle mascot
- 8 colors + rainbow gradient mode
- 4 line thickness options
- Eraser with visual cursor
- Full undo/redo (20 action history)
- Professional dual toolbar
- Progress dashboard with statistics
- Complete words tab
- Gamification (rewards, badges, achievements)
- Framework: React Native + Expo Router
- Language: TypeScript
- State: Zustand
- Graphics: React Native SVG
- Animations: Reanimated + Gesture Handler
- Testing: Jest + React Native Testing Library
- Error Tracking: Sentry
- Logging: Structured logs (HX standards)
- Node.js 18+ and npm
- iOS Simulator (Mac) or Android Studio
- Expo CLI (installed automatically)
# Clone the repository
git clone https://github.com/yourusername/tiny-trails.git
cd tiny-trails
# Install dependencies
npm install
# Copy environment template
cp .env.example .env
# Start development server
npm start# iOS
npm run ios
# Android
npm run android
# Web
npm run web# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverage- Target: 80% coverage minimum
- Critical paths: 100% coverage
- Core utilities (pathSmoothing, telemetry)
- Component rendering and interactions
- Error boundaries
- Create account at https://sentry.io
- Create new project for React Native
- Copy your DSN
- Add to
.envfile:EXPO_PUBLIC_SENTRY_DSN=https://your-key@sentry.io/your-project
Structured logs follow Holiday Extras standards:
- DEBUG: Development only
- INFO: Key state changes
- WARN: Anomalies (non-critical)
- ERROR: Actionable failures
import { logInfo, logError } from './utils/logger';
// Log an event
logInfo('Letter completed', { letter: 'A', coverage: 95 });
// Log an error
logError('Failed to save progress', error, { userId: 'anon' });import { logEvent, Events } from './utils/telemetry';
// Track user actions
logEvent(Events.LETTER_STARTED, { letter: 'A' });
logEvent(Events.COLOR_CHANGED, { color: 'red' });See SECURITY.md for full details.
- β NO PII collection without consent
- β COPPA/GDPR-K compliant design
- β All data stored locally by default
- β Error reports anonymized
- β Parental controls (planned)
tiny-trails/
βββ app/ # Expo Router pages
β βββ (tabs)/ # Tab navigation
βββ components/ # React components
β βββ ColorPicker.tsx
β βββ ThicknessPicker.tsx
β βββ DrawingToolbar.tsx
β βββ ErrorBoundary.tsx # NEW!
β βββ LetterTracingPhase2.tsx
βββ utils/ # Utilities
β βββ telemetry.ts # NEW! Analytics & errors
β βββ logger.ts # NEW! Structured logging
β βββ pathSmoothing.ts # Drawing algorithms
β βββ __tests__/ # NEW! Unit tests
βββ styles/ # Theme and styles
βββ store/ # Zustand stores
βββ CHANGELOG.md # NEW! Version history
βββ SECURITY.md # NEW! Privacy policy
βββ jest.config.js # NEW! Test configuration
All screens are wrapped in Error Boundaries:
import { ErrorBoundary } from './components/ErrorBoundary';
<ErrorBoundary>
<YourScreen />
</ErrorBoundary>Errors are automatically:
- Caught and logged to Sentry
- Displayed with child-friendly UI
- Recoverable with "Try Again" button
We follow Semantic Versioning:
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes
See CHANGELOG.md for version history.
# Update version in package.json
npm version minor # or major/patch
# Update CHANGELOG.md
# Create git tag
git tag -a v1.1.0 -m "Phase 3: Progress Dashboard"
git push origin v1.1.0npm run build:web
# Deploy dist/ folder to Netlifyexpo build:ios
# Follow App Store submission guidelinesexpo build:android
# Follow Play Store submission guidelines- TypeScript strict mode enabled
- ESLint for code quality
- Prettier for formatting (pending setup)
- 80% minimum test coverage
- Create feature branch:
git checkout -b feature/name - Write tests first (TDD encouraged)
- Implement feature
- Ensure tests pass:
npm test - Update CHANGELOG.md
- Create pull request
Follow Conventional Commits:
feat: add progress dashboard
fix: resolve crash on letter completion
docs: update README with testing guide
test: add coverage for pathSmoothing
- 60 FPS during drawing
- <100ms gesture response time
- <2s app startup time
- <50MB memory usage
- Sentry performance monitoring
- React DevTools Profiler
- Custom performance logs via
logPerformance()
- Read SECURITY.md for privacy requirements
- Check CHANGELOG.md for current version
- Follow development guidelines above
- Add tests for new features
- Update documentation
MIT License - see LICENSE file
- Inspired by educational apps for early childhood learning
- Uses Expo for cross-platform development
- Follows Holiday Extras technical standards
- GitHub Issues: Bug reports and feature requests
- Email: support@tinytrails.app (when available)
- Documentation: See /docs folder
Made with β€οΈ for children's education