Design your world.
Mappic is a creative web application that lets you generate beautiful, fully customizable map-based poster designs. Choose any location in the world, customize every detail with multiple styles and themes, and export print-ready designs.
With Mappic, you can create stunning visual representations of your favorite places, perfect for home decor, gifts, or personal projects.
- 🌍 Interactive Map Rendering — Any city or coordinate in the world
- 🎨 Full Style Customization — Colors, compositions, themes, and textures
- 🖼️ Print-Ready Export — High-quality poster layouts ready to print
- ⚡ Fast & Responsive UI — Built with Nuxt 4 + Vue 3 for optimal performance
- 💾 Real-time Preview — Instant visual feedback while designing
- 📁 File Management — Upload, organize, and manage your designs
- 🔐 Firebase Integration — Secure cloud storage and authentication
- 🌐 Multi-language Support — English, Spanish, and Chinese
- Framework: Nuxt 4 (Vue 3 + Composition API)
- Language: TypeScript 5
- Styling: TailwindCSS + Nuxt UI
- Icons: Tabler Icons
- State Management: Pinia
- Validation: Zod
- Backend: Firebase (Serverless)
- Database: Firestore (NoSQL)
- Storage: Firebase Storage (File uploads)
- Authentication: Firebase Auth
- API Layer: Centralized services in
shared/services/
- Package Manager: npm / pnpm
- Build Tool: Nuxt (Vite)
- Testing: Vitest
- Linting: ESLint + Prettier
- Deployment: Vercel / Firebase Hosting
- Node.js 18+
- npm or pnpm
# Clone the repository
git clone https://github.com/BasBravo/Mappic.git
cd Mappic
# Install dependencies
npm install
# or
pnpm installCreate a .env.local file in the root directory:
# Firebase Configuration
NUXT_PUBLIC_FIREBASE_API_KEY=your_api_key
NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
NUXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NUXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
NUXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NUXT_PUBLIC_FIREBASE_APP_ID=your_app_idSee .env.example for all available options.
npm run dev
# or
pnpm devThe application will be available at http://localhost:3000
npm run build
# or
pnpm buildnpm run preview
# or
pnpm preview# Unit tests
npm run test:unit
# Component tests
npm run test:nuxt
# All tests
npm run test# Lint code
npm run lint
# Fix linting issues
npm run lint:fix
# Format code
npm run format
# Type checking
npm run typecheck
# Full validation (pre-push)
npm run validatemappic/
├── app/ # Nuxt application
│ ├── components/ # Reusable UI components
│ ├── composables/ # Business logic hooks
│ ├── pages/ # Route pages
│ ├── layouts/ # Layout templates
│ ├── plugins/ # Nuxt plugins
│ ├── middleware/ # Route middleware
│ └── utils/ # Utility functions
│
├── shared/
│ └── services/ # Firebase services layer
│ ├── file.ts # File operations
│ ├── map.ts # Map operations
│ ├── auth.ts # Authentication
│ └── ... # Other services
│
├── stores/ # Pinia stores (global state)
├── types/ # TypeScript type definitions
├── helpers/ # Helper functions
├── public/ # Static assets
├── nuxt.config.ts # Nuxt configuration
├── tsconfig.json # TypeScript configuration
└── tailwind.config.js # Tailwind CSS configuration
Components (UI)
↓ uses
Composables (Business Logic)
↓ uses
Stores (State) + Services (Firebase)
↓ uses
Firebase (Firestore + Storage)
Key Principles:
- ✅ Components are UI-focused, no business logic
- ✅ Composables orchestrate services and stores
- ✅ Services are pure functions with explicit parameters
- ✅ Stores manage global state immutably
- ✅ Automatic URL normalization from Firebase
- ✅ Centralized error handling
All Firebase operations are centralized in shared/services/:
- file.ts — File CRUD operations with URL normalization
- map.ts — Map CRUD operations with reference handling
- auth.ts — Authentication and user management
- config.ts — Configuration and constants
Services automatically normalize Firebase Storage URLs to ensure consistency across the application.
- AGENTS.md — Comprehensive coding guidelines and patterns
- Memory Bank — Architecture and technical documentation
projectbrief.md— Project overview and goalsproductContext.md— Product features and data structuresystemPatterns.md— Architecture and design patternstechContext.md— Technical stack and configurationactiveContext.md— Current state and decisionsprogress.md— Development progress and roadmap
Contributions are welcome! Please follow these guidelines:
-
Fork the repository and create a feature branch
git checkout -b feature/your-feature-name
-
Follow the coding standards in AGENTS.md
- Use TypeScript for type safety
- Follow the component/composable/service pattern
- Use TailwindCSS for styling
- Use Tabler Icons for icons
-
Write tests for new features
npm run test -
Validate your code before pushing
npm run validate
-
Create a Pull Request with a clear description of changes
# Create feature branch
git checkout -b feature/amazing-feature
# Make changes and commit
git add .
git commit -m "feat: add amazing feature"
# Push to your fork
git push origin feature/amazing-feature
# Create Pull Request on GitHubThis project is licensed under the MIT License — see the LICENSE file for details.
You are free to use, modify, and distribute this software for any purpose, commercial or personal.
BasBravo
- Built with Nuxt 4
- Powered by Firebase
- Styled with TailwindCSS + Nuxt UI
- Icons from Tabler Icons
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: See AGENTS.md and Memory Bank
- Advanced map styling options
- Batch export functionality
- Collaboration features
- Mobile app version
- API for third-party integrations
- Performance optimizations
- Additional language support
Made with ❤️ by BasBravo
Design your world with Mappic.