Mappic

Design your world β€” Mappic.app is a web application for creating fully customizable poster designs from maps.

1
0
1
Vue
public

πŸ—ΊοΈ Mappic

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.


✨ Features

  • 🌍 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

πŸš€ Live Demo

πŸ‘‰ https://mappic.app


πŸ› οΈ Tech Stack

Frontend

  • Framework: Nuxt 4 (Vue 3 + Composition API)
  • Language: TypeScript 5
  • Styling: TailwindCSS + Nuxt UI
  • Icons: Tabler Icons
  • State Management: Pinia
  • Validation: Zod

Backend & Services

  • Backend: Firebase (Serverless)
    • Database: Firestore (NoSQL)
    • Storage: Firebase Storage (File uploads)
    • Authentication: Firebase Auth
  • API Layer: Centralized services in shared/services/

Development & Deployment

  • Package Manager: npm / pnpm
  • Build Tool: Nuxt (Vite)
  • Testing: Vitest
  • Linting: ESLint + Prettier
  • Deployment: Vercel / Firebase Hosting

πŸ“¦ Installation

Prerequisites

  • Node.js 18+
  • npm or pnpm

Clone & Setup

# Clone the repository
git clone https://github.com/BasBravo/Mappic.git
cd Mappic

# Install dependencies
npm install
# or
pnpm install

Environment Configuration

Create 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_id

See .env.example for all available options.


πŸš€ Development

Start Development Server

npm run dev
# or
pnpm dev

The application will be available at http://localhost:3000

Build for Production

npm run build
# or
pnpm build

Preview Production Build

npm run preview
# or
pnpm preview

Run Tests

# Unit tests
npm run test:unit

# Component tests
npm run test:nuxt

# All tests
npm run test

Code Quality

# 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 validate

πŸ—οΈ Architecture

Project Structure

mappic/
β”œβ”€β”€ 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

Architecture Pattern

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

Services Layer

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.


πŸ“š Documentation

  • AGENTS.md β€” Comprehensive coding guidelines and patterns
  • Memory Bank β€” Architecture and technical documentation
    • projectbrief.md β€” Project overview and goals
    • productContext.md β€” Product features and data structure
    • systemPatterns.md β€” Architecture and design patterns
    • techContext.md β€” Technical stack and configuration
    • activeContext.md β€” Current state and decisions
    • progress.md β€” Development progress and roadmap

🀝 Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository and create a feature branch

    git checkout -b feature/your-feature-name
    
  2. 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
  3. Write tests for new features

    npm run test
    
  4. Validate your code before pushing

    npm run validate
    
  5. Create a Pull Request with a clear description of changes

Development Workflow

# 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 GitHub

πŸ“„ License

This 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.


πŸ‘¨β€πŸ’» Author

BasBravo


πŸ™ Acknowledgments


πŸ“ž Support


🎯 Roadmap


Made with ❀️ by BasBravo

Design your world with Mappic.

v0.3.1[beta]