Skip to content

Jasperc2024/Domapus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Live Website TypeScript License Deploy to GitHub Pages GitHub Stars

Domapus visualizes U.S. housing market data at the ZIP-code level.
Built with React, TypeScript, and MapLibre GL JS, it makes nationwide housing trends interactive and accessible.

Preview


✨ Features

πŸ—ΊοΈ Map & Data Visualization

  • Interactive ZIP-level map updated monthly
  • Metrics: median price, inventory, DOM, listings, sales, and more
  • Hover tooltips, and ZIP search

πŸ“Š Analytics & Export

  • Quintile-based legend for data distribution
  • Export maps to PNG or PDF with title and legend options

πŸš€ Quick Start

  1. Clone the repository

    git clone https://github.com/Jasperc2024/Domapus.git
    cd Domapus
  2. Install dependencies

    npm install
  3. Start the development server

    npm run dev
  4. Open your browser Navigate to http://localhost:8080/Domapus/

Build for Production

npm run build && npm run preview

πŸ—οΈ Project Structure

see tree.txt


πŸ“ˆ Metrics Overview

Metric Description
Median Sale Price* Typical price of sold homes
Median List Price Typical asking price
Median Price per Sq Ft* Cost per square foot
Homes Sold Closed transactions
Pending Sales Homes under contract
New Listings Homes newly added
Inventory Homes available for sale
Months of Supply Time to sell all inventory at current rate
Median Days on Market* Time from listing to pending
Sale-to-List Ratio* Sale price Γ· asking price
% Sold Above List % of homes sold above asking price
% Price Drops % of listings that reduced price
% Off Market in 2 Weeks % of homes selling within 14 days

* Available as choropleth metric


🧠 Tech Stack

Frontend: React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui

Visualization: MapLibre GL JS

Data: Redfin (market), U.S. Census (ZCTA)

Data Processing: Github Action, Python

Export Tools: html2canvas, jsPDF


πŸ”§ Configuration

Environment Variables

# Base URL for the application (set in vite.config.ts)
VITE_BASE_URL=/Domapus/

# Data source URLs (configured in components)
VITE_DATA_CDN=https://cdn.jsdelivr.net/gh/Jasperc2024/Domapus@main/public/data/zip-data.json

Build Configuration

The project uses Vite with custom configuration for:

  • Base path configuration for GitHub Pages
  • Asset optimization and chunking
  • TypeScript compilation with strict mode
  • Tailwind CSS with custom design system

🌐 Data Sources

  • Redfin real estate market data (Update monthly)
  • U.S. Census ZIP Code Tabulation Areas (ZCTA)

πŸ”’ Privacy & Security

  • 100% client-side processing
  • All assets served securely over HTTPS

🀝 Contributing

Development Workflow

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes with proper TypeScript types
  4. Test your changes: npm run build && npm run preview
  5. Run linting: npm run lint
  6. Commit your changes: git commit -m 'Add amazing feature'
  7. Push to your branch: git push origin feature/amazing-feature
  8. Open a Pull Request

Code Standards

  • TypeScript strict mode enabled
  • ESLint configuration with React and accessibility rules
  • Prettier code formatting
  • Component-based architecture with clear separation of concerns

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™‹ Support


β˜• Support the Project

If you find Domapus useful, consider supporting its development:

Buy Me A Coffee


πŸ† Acknowledgments

  • Redfin for providing comprehensive real estate data
  • U.S. Census Bureau for ZIP code boundary data
  • MapLibre GL JS Community for the excellent mapping library
  • React & Vite Teams for the modern development experience
  • shadcn for the beautiful component library

Built with ❀️ by Jasper Chen
Making housing data accessible and actionable for everyone