Bản đồ tìm nhà vệ sinh sạch gần bạn — Vietnam's toilet-finder map. Trạng thái: Đã ngừng hoạt động & mở mã nguồn cho cộng đồng — Discontinued, open-sourced to the community.
Tolereveo giúp người Việt tìm nhà vệ sinh sạch, gần nhất — ở quán cà phê, trạm xăng, trạm sạc, nhà hàng, công viên và nhiều nơi khác. Dự án từng chạy production tại tolereveo.com qua Cloudflare Tunnel. Chúng tôi hết tiền duy trì server nên tạm ngưng và trao toàn bộ source code cho cộng đồng.
Tolereveo helps people in Vietnam find clean, nearby restrooms — at coffee shops, gas stations, charging stations, restaurants, parks and more. It ran in production at tolereveo.com. We can no longer afford to keep the server running, so we're shutting it down and giving the full source to the community. Fork it, host it, improve it — it's yours.
| Trang chủ | Bản đồ |
|---|---|
![]() |
![]() |
| Thêm nhà vệ sinh | Bản đồ trên điện thoại |
|---|---|
![]() |
![]() |
| Trang chủ di động | Đăng nhập |
|---|---|
![]() |
![]() |
- Bản đồ tương tác — MapLibre GL JS + Goong tiles, hiển thị nhà vệ sinh gần vị trí hiện tại.
- Danh mục — cà phê, trạm xăng, trạm sạc, nhà hàng, cửa hàng, công viên, khách sạn, bãi đậu xe... (với icon GIF 8-bit).
- Thêm nhà vệ sinh — bất kỳ ai cũng cung cấp được, kiểm duyệt qua admin panel.
- Đánh giá & ảnh — người dùng chấm điểm, bình luận, tải ảnh lên.
- Chỉ đường — gọi Goong Routing API để dẫn đường tới nhà vệ sinh.
- Tài khoản — đăng ký / đăng nhập (Sanctum token), hồ sơ người dùng, avatar.
- Admin panel — Blade tại
/admin, kiểm duyệt toilet, review, quản lý người dùng, amenity. - Giao diện — 8-bit pixel art dark theme, font Be Vietnam Pro, animation GSAP.
- Khả năng tìm kiếm — bản đồ toàn màn hình, danh sách toilet của tôi, lọc theo danh mục.
| Lớp | Công nghệ |
|---|---|
| Backend | Laravel 13.x (PHP 8.4), Sanctum, Blade admin |
| Database | PostgreSQL 16 |
| Cache / Queue / Session | Redis 7 |
| Frontend | Vue 3 + Vite + Pinia + Vue Router + Tailwind CSS |
| Bản đồ | MapLibre GL JS + Goong tiles (direct API, không proxy) |
| Chỉ đường | Goong Routing API |
| Triển khai | Docker Compose (PHP-FPM, Nginx, PostgreSQL, Redis) |
| Tunnel | Cloudflare Tunnel |
| Khóa chính | UUID |
Chúng tôi đã hết nguồn tài chính để duy trì server, nên Tolereveo không còn hoạt động online (server đã tắt). Thay vì để source rơi rớt, chúng tôi mở mã nguồn toàn bộ và giao cho cộng đồng:
- Fork và tự host nếu bạn muốn giúp Tolereveo sống lại.
- Mọi đóng góp được hoan nghênh — fix bug, thêm tính năng, cải thiện UI.
- Nếu bạn tiếp nhận dự án, hãy nhớ revoke/go bỏ các API key Goong cũ (key đã bị xóa khỏi repo và git history, nhưng bạn cần tạo key riêng của mình tại https://account.goong.io).
We ran out of funding to keep the server online, so Tolereveo is no longer live. Rather than let the code rot, we open-sourced everything for the community. Fork it and bring it back to life if you want to. All Goong API keys were scrubbed from the repo and git history — you must create your own at https://account.goong.io.
- Docker + Docker Compose
- Tài khoản Goong (free tier ok) → 1 API key + 1 Map key tại https://account.goong.io
- Python 3.10+ (nếu muốn scrape dữ liệu)
# 1. Clone
git clone https://github.com/vigstudio/tolereveo.git
cd tolereveo
# 2. Cấu hình backend
cp backend/.env.docker backend/.env
# -> tự sinh APP_KEY: docker compose exec app php artisan key:generate
# -> điền GOONG_API_KEY + GOONG_MAP_KEY từ account.goong.io
# 3. Cấu hình frontend
cp frontend/.env.production frontend/.env.local
# -> điền VITE_GOONG_MAP_KEY
# 4. Cấu hình Docker (mật khẩu DB)
cp .env.example .env
# -> đổi DB_PASSWORD thành mật khẩu bạn muốn
# 5. Build & chạy
docker compose up -d --build
# 6. Chạy migrate (tự sinh APP_KEY nếu chưa)
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate
# 7. (Tùy chọn) Nạp dữ liệu nhà vệ sinh
python tools/scraper.py # scrape từ Google Maps -> tools/toilets_data.json
# sau đó import vào DB:
docker compose exec app php artisan toilets:import --file=tools/toilets_data.json
# hoặc: python tools/import_to_db.py (cần DB_PASSWORD env)| URL | Mô tả |
|---|---|
| http://localhost:4101 | Frontend (Vue app) |
| http://localhost:4101/api | API (Laravel, qua Nginx proxy) |
| http://localhost:4101/admin | Admin panel (Blade, session auth) |
Chưa có tài khoản admin. Tạo admin đầu tiên trực tiếp trong DB:
UPDATE users SET is_admin = true WHERE email = 'your@email';(quadocker compose exec db psql -U tolereveo_user -d tolereveo).
Dữ liệu nhà vệ sinh ban đầu được scrape từ Google Maps (tools/scraper.py) — các chuỗi quán cà phê, trạm xăng, trạm sạc tại 63 tỉnh thành Việt Nam. File dữ liệu (tools/toilets_data.json) không được lưu trong repo (bạn có thể scrape lại). Dữ liệu vị trí là business public, không phải thông tin cá nhân.
The initial toilet dataset was scraped from Google Maps (coffee chains, gas stations, EV charging across 63 Vietnamese provinces). The data file is not included in the repo — regenerate it with tools/scraper.py. Locations are public businesses, not personal data.
tolereveo/
- backend/ # Laravel 13 API + Blade admin
- frontend/ # Vue 3 + Vite SPA
- tools/ # scraper.py, import_to_db.py, category GIF generator, UI test scripts
- docker-compose.yml
- .env.example # DB password template for docker compose
Trước khi mở mã nguồn, tất cả thông tin nhạy cảm (Goong API keys, Laravel APP_KEY, DB password) đã được xóa khỏi working tree và git history. Nếu bạn là chủ repo gốc: revoke ngay các key Goong cũ tại https://account.goong.io và tạo lại APP_KEY mới, vì chúng đã từng nằm trong git history.
Before open-sourcing, all secrets (Goong API keys, Laravel APP_KEY, DB password) were scrubbed from both the working tree and git history. If you're the original owner: revoke the old Goong keys immediately at https://account.goong.io and regenerate the APP_KEY, since they were once committed.
Mã nguồn được phép theo MIT License — làm bất kỳ thứ gì bạn muốn. Xem file LICENSE.
The source is licensed under the MIT License — do whatever you want with it.
Tolereveo được xây dựng bởi vigstudio với tình yêu với bản đồ và những nhà vệ sinh sạch của Việt Nam.
Built by vigstudio with love for maps and clean Vietnamese restrooms. If you revive it, let us know — we'd love to see it live again.





