- HTML 79.2%
- TypeScript 14.7%
- Rust 5.6%
- CSS 0.3%
- Shell 0.2%
| apps | ||
| packages/backend-types | ||
| .env.example | ||
| .gitignore | ||
| deploy.sh | ||
| LICENSE | ||
| orval.config.ts | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| readme.md | ||
| tsconfig.json | ||
campanita.app
Do not miss your favorite peddler again!
Early Alpha: https://campanita.juanmanzanero.com
What is Campanita?
Campanita connects street peddlers with customers in real-time. Peddlers share their live location on a map, customers see them nearby and request a visit, and peddlers accept or reject in seconds. No more missed snack vendors.
Current Features
- User registration with automatic username generation
- Peddler profiles (name, description, category)
- Live location sharing for peddlers
- Map view to discover nearby peddlers
Roadmap
Next (Early Alpha)
- Progressive Web App (PWA) for Android & iOS
- Push notifications
- Visit request system (customers → peddlers)
- Request management (accept/reject)
Technical
- Unit, integration, and E2E tests
- Load testing and performance optimization
- Query and backend optimization
Growth
- Hand-drawn logo (Inkscape)
- Landing page
- Beta testing with local peddlers
- Outreach to established peddler networks
Why Open Source?
I believe execution matters more than ideas—the real value is in building and iterating. I'm also using this project to showcase my skills and contribute to the community. Plus, transparency builds trust when handling location data.
How It Makes Money
Peddlers will pay a monthly subscription for premium features like route optimization, analytics, heatmaps, and customer insights. No in-app purchases planned.
Why Web-Only?
Faster development cycle + no app store approval delays. A native mobile app will follow if the project gains traction.
Tech Stack
Frontend
- React, Vite, TypeScript
- react-router (data mode), TailwindCSS, shadcn/ui
- Zustand, react-leaflet, i18next
Backend
- Actix-Web (Rust)
- PostgreSQL, Docker, nginx, systemd
Getting Started
Dependencies
- cargo (Rust, backend)
- docker-cli (or docker-compose)
- pnpm
Running it locally
Backend
cd apps/api && docker-compose up -d(this will run the PostgreSQL DB in a container)- After the Docker container is up and healthy:
cargo run(Run dev mode)
Frontend
cd apps/spa && pnpm i(Install node dependencies)pnpm dev(Run dev mode)
Running it on production
- You should prepare your remote server with the mentioned dependencies, except
cargo(Build the backend binary locally). - Also run the DB Container.
- Configure
nginx,systemd(or your selected init system), create directories, unix user with the respective permissions, etc. - Check deploy.sh
Considerations
- Backend is meant to be built locally, then deploy the binary, don't forget the
.envandconfig/default.toml,config/production.tomlconfig files (should be available in your server) - Frontend is a Single Page Application (static files), no JS-runtime needed on the server
License
MIT License – see LICENSE file for details.
About Me
I'm Juan Manzanero, a software developer. I've been thinking about this problem for years, but only recently had the experience to build it properly. I chose Rust and Actix-Web for it's performance and reliability, and React as is the Frontend framework/library that I enjoy using it for building UI.
Learn more: juanmanzanero.com