Busabase
Busabase는 AI 에이전트를 위한 오픈소스(MIT) 데이터베이스 및 작업 공간입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Live demo → toronto-airbnb-dashboard.vercel.app
A data pipeline and interactive dashboard that maps 22,050 Toronto Airbnb listings across 140 neighbourhoods into four market quadrants. Built as a portfolio project to demonstrate end-to-end data engineering, from raw CSV to live, auto-updating web product.
Every neighbourhood is scored on two axes — occupancy (estimated nights booked per year) and guest rating — then placed into one of four quadrants:
| Quadrant | Occupancy | Rating | Story |
|---|---|---|---|
| Q1 Star | ≥ median | ≥ median | Highly booked and highly rated — market leaders |
| Q2 Volume | ≥ median | < median | Busy but under-delivering on guest experience |
| Q3 Hidden Gem | < median | ≥ median | Well-reviewed but underdiscovered |
| Q4 Struggling | < median | < median | Low demand and low satisfaction |
The dashboard also compares listing performance by number of amenities listed, room type composition, property type comparisons, a 3-year monthly activity trend, and neighbourhood leaderboards.
Inside Airbnb CSV (manual download, quarterly)
│
│ git push rawdata_new/
▼
┌─────────────────────────────────────┐
│ GitHub Actions │
│ │
│ 1. clean.py — normalise & dedupe │
│ 2. analyze.py — pre-compute stats │
│ 3. load.py — upsert to database │
└─────────────────────────────────────┘
│
│ supabase-py (service role key, stored as GH Secret)
▼
┌─────────────────────────────────────┐
│ Supabase (Postgres + REST API) │
│ 9 tables, all pre-computed │
└─────────────────────────────────────┘
│
│ fetch() on page load (anon key, safe to expose)
▼
┌─────────────────────────────────────┐
│ Vercel (static frontend) │
│ Chart.js · Leaflet · vanilla JS │
└─────────────────────────────────────┘
Update cycle: Drop new CSVs into rawdata_new/, push. GitHub Actions handles the rest. reviews.csv only needs the listing_id and date columns. Trim it to those before pushing so it stays under GitHub's 100 MB file limit. calendar.csv isn't used and is gitignored. No server to maintain; entire stack runs on free tiers.
Nine Postgres tables hold all pre-computed results. The frontend reads directly via Supabase's auto-generated REST API. No custom backend needed.
| Table | Rows | Purpose |
|---|---|---|
neighbourhoods | 140 | Core quadrant data, coordinates, aggregated metrics |
monthly_activity | 4,861 | Neighbourhood × month time-series (review & occupancy) |
monthly_totals | 35 | Citywide monthly aggregates — used by the trend chart |
room_type_stats | 316 | Neighbourhood × room type breakdown |
room_type_citywide | 4 | Citywide stats per room type (true median, nulls excluded) |
amenity_count_stats | 6 | Listing performance grouped by number of amenities listed |
property_type_stats | 8 | Top 8 property types by supply |
leaderboards | 30 | Pre-ranked top-10 lists for three categories |
citywide_medians | 2 | Reference values that define the quadrant split lines |
Row-level security is enabled on every table with a public-read policy. The pipeline writes via service role key (GitHub Secret); the frontend reads via anon key.
Why occupancy instead of price? Inside Airbnb removed price data from their public dataset in 2025. Rather than approximate price from third-party sources, I pivoted the quadrant axis to occupancy (estimated nights booked per year), which is arguably a more direct signal of market performance anyway. The quadrant model stays logically coherent. It just answers "who's busy and well-reviewed" instead of "who's expensive and well-reviewed".
Why compute quadrant medians from neighbourhood aggregates, not raw listings? Airbnb's rating system is heavily inflated at the listing level, the citywide median rating across 22,050 listings is 4.9, which would place almost every neighbourhood below the median. Instead, the pipeline first aggregates to neighbourhood-level averages, then takes the median of those 140 values (4.79). This produces a balanced four-way split.
Why a monthly_totals pre-aggregation table?
Supabase's free tier enforces a 1,000-row hard limit per API response. The monthly_activity table has 4,861 rows (140 neighbourhoods × up to 36 months). Fetching it in chunks would require sequential paginated requests, which slows page load and complicates client code. Pre-aggregating to one row per month reduces the payload to 35 rows and makes the frontend code simpler.
Why compare amenity counts instead of individual amenities? A listing typically has 30 to 50 amenities, so "average of listings with amenity X" mostly measures the same listings over and over. Labels also fragment: "Heating" and "Central heating" are separate tags, which made heating look like it hurt bookings. Grouping listings by how many amenities they list gives a clean, readable signal: more complete listings get more bookings and better ratings. It's presented as a correlation, not cause and effect.
Why keep all computation in Python rather than SQL views? The pipeline runs in GitHub Actions, not inside the database. Keeping logic in Python (pandas) makes it easier to test locally, version-control, and reason about without needing a live DB connection. The tradeoff is slightly more code, but the testability is worth it for a project that updates on a push-triggered schedule.
| Layer | Tool | Why |
|---|---|---|
| Data source | Inside Airbnb | Quarterly Toronto scrape, publicly available |
| CI / pipeline trigger | GitHub Actions | Free, push-triggered, no infra to manage |
| Data processing | Python · pandas · numpy | Flexible, readable, easy to run locally |
| Database + API | Supabase (Postgres) | Auto-generated REST API, free tier, RLS built-in |
| Frontend | Vanilla JS · Chart.js · Leaflet | No framework overhead for a single-page viz |
| Hosting | Vercel | Zero-config static deploy from GitHub |
Source: Inside Airbnb — Toronto Snapshot date: September 2026