sempedia/UpVote
UpVote – Mobile Feature Voting System. Full-stack application that lets users post feature ideas and upvote others. This project demonstrates a basic end-to-end voting system for features, including a backend API, a database, and a mobile-friendly frontend built with React Native (Expo GO).
🗳️ UpVote – Feature Voting System
Welcome to UpVote, a simple full-stack application that lets users post feature ideas and upvote others. This project demonstrates a basic end-to-end voting system for features, including a backend API, a database, and a mobile-friendly frontend built with React Native (Expo). This project was developed with the assistance of a large language model to build a complete, end-to-end feature voting app in under 2 hours.
📌 Overview
UpVote is a feature suggestion and voting platform where users can:
- ✅ Submit new feature ideas
- 🔼 Upvote features they want implemented
- 📱 Use the app on a mobile device or via a web interface
🧠 Challenge Goals
This challenge simulates the type of work expected from an AI-powered developer:
| Category | Goal |
|---|---|
| Prompting Skills | Clear, layered, iterative prompts to AI models |
| Tool Orchestration | Use AI to scaffold backend, frontend, DB, docs, and more |
| System Thinking | End-to-end logical data and component flow |
| Functionality | A working full-stack MVP experience |
| Multi-Platform Output | Functional UI for both web and mobile |
| Debugging / Edge Cases | Smart design decisions, error resilience |
| Prompt Logs | Included at the bottom of this README |
⚙️ Tech Stack
| Layer | Tool |
|---|---|
| Frontend | React Native (Expo) |
| Backend | Django and Django Rest Framework (DRF) |
| Database | PostgreSQL |
| AI Helped By | Claude Sonet 4 |
| Dev Tools | Docker, psycopg2-binary |
🔩 Features
- ✅ Add new features via form input
- 🔼 Upvote existing features
- 📜 List all feature requests with vote counts
- 🔁 Persistent storage using PostgreSQL
- 🚀 Easily extensible to web or other platforms
📂 Project Structure
UpVote/
├── backend/
│ ├── upvote_project/ # Django project
│ ├── manage.py
│ ├── core/ # Django app for core logic
│ ├── requirements.txt
│ └── Dockerfile # Backend Docker image
├── frontend/
│ ├── App.js # Main entry
│ ├── src/
│ └── package.json
├── docker-compose.yml # Docker Compose file
├── .gitignore
├── README.md
└── prompts.txt # 🧠 AI prompting log
🚀 Setup Instructions
-
Clone the Repo
git clone [https://github.com/sempedia/UpVote.git](https://github.com/sempedia/UpVote.git) cd upvote -
Run with Docker Compose (Recommended)
Make sure you have Docker and Docker Compose installed. This will start both the backend and frontend services.
docker-compose up --build -d
- The Backend API will be accessible at:
http://localhost:8000 - The Frontend will be accessible via Expo's QR code for mobile or in your browser at
http://localhost:19006.
To stop the services:
docker-compose down
- The Backend API will be accessible at:
-
Backend Setup (Manual)
If you want to run the backend manually without Docker, ensure you have Python 3.9+ and PostgreSQL installed.
cd backend pip install -r requirements.txt python manage.py migrate python manage.py runserverThe API will be available at:
http://localhost:8000
🧪 Sample API Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/features/ |
List all features |
POST |
/api/features/ |
Create a new feature |
POST |
/api/features/{id}/vote/ |
Upvote a feature |
🧠 Prompting Strategy & AI Logs
- Prompting was done using Claude Sonet 4.
- Logs are saved in
prompts.txt, showing:- Scaffolding of the backend and frontend
- Architecture decisions
- Error fixing
- Git setup and
.gitignore - AI-generated documentation templates
🧹 Known Limitations
- No authentication (public voting)
- Minimal validation on input
- Flat data model (no user linkage or comments)
✅ Future Improvements
- 🔐 User login and roles
- 🧠 AI-assisted feature prioritization
- 💬 Comments per feature
- 📊 Sorting, filtering, and search
- ☁️ Cloud DB and deployment
🧑💻 Author
🪄 License
MIT License – free to use, adapt, or build on.