Blame
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 1 | # Sales Tracker |
2 | ||||
e1358d | Tebby Dog | 2025-08-08 19:56:47 | 3 | > A modern-as-hell, playful web application for tracking sales and wrangling analytics — with an interactive login that's almost too clever for its own good. |
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 4 | |
5b38af | Tebby Dog | 2025-08-08 19:55:53 | 5 |  |
6 |  |
|||
7 |  |
|||
8 |  |
|||
38db7e | Tebby Dog | 2025-08-08 20:16:04 | 9 |  |
5b38af | Tebby Dog | 2025-08-08 19:55:53 | 10 | |
5e8472 | Tebby Dog | 2025-08-09 20:09:14 | 11 | <details> |
12 | <summary><i>Click to show screenshots</i></summary> |
|||
13 | ||||
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 14 | ## Screenshots |
9f0431 | Tebby Dog | 2025-08-08 19:47:57 | 15 |  |
76cb58 | Tebby Dog | 2025-08-08 19:46:58 | 16 | [](./Screenshot_2025-08-08_at_3.36.48_PM.png) |
17 | [](./Screenshot_2025-08-08_at_3.36.41_PM.png) |
|||
18 | [](./Screenshot_2025-08-08_at_3.36.30_PM.png) |
|||
19 | [](./Screenshot_2025-08-08_at_3.36.21_PM.png) |
|||
20 | [](./Screenshot_2025-08-08_at_3.35.43_PM.png) |
|||
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 21 | |
5e8472 | Tebby Dog | 2025-08-09 20:09:14 | 22 | </details> |
23 | ||||
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 24 | ## Features |
25 | ||||
26 | - 📊 **Sales Analytics Dashboard** – Visualize sales like a data-driven badass |
|||
27 | - 👥 **User Management** – Multi-level permissions so your team doesn’t accidentally break stuff |
|||
28 | - 📈 **Data Entry & Export** – Input sales quickly and shoot that crap into Excel |
|||
29 | - 🎮 **Interactive Login** – Cursor-evasive Sign In button just to mess with people |
|||
30 | - 🔒 **Secure Authentication** – Password hashing that even your nosy-ass sysadmin can’t break |
|||
31 | - 📱 **Responsive Design** – Runs smooth on desktop, tablet, or that old phone you still won’t upgrade |
|||
32 | ||||
33 | ### Core Functionality |
|||
34 | ||||
35 | - **Employee Management** – Add/edit employees, their commissions, draws — the whole damn deal |
|||
36 | - **Sales Data Entry** – Do it by hand or slam in a CSV like a pro |
|||
37 | - **Analytics Dashboard** – Filter and graph until the numbers make sense or you rage-quit |
|||
38 | - **Admin Panel** – Wrapped in password protection, because duh |
|||
39 | ||||
40 | ### Database Schema |
|||
41 | ||||
42 | Your data’s not just dumped — we gave it structure like responsible grownups: |
|||
43 | ||||
44 | - **Employee Table**: Tracks the who, what, and when of your sales crew |
|||
45 | - **Sales Table**: Logs every dollar that rolls in |
|||
46 | - **Settings Table**: Keeps track of your system’s default working setup and toggles |
|||
47 | - **Goals Table**: Measure who's slaying and who's slacking |
|||
48 | ||||
49 | ### Three Main Pages |
|||
50 | ||||
51 | #### 1. Management Tab (Locked Behind a Password Wall) |
|||
52 | ||||
53 | - Admin login with proper credentials (no password123 crap) |
|||
54 | - Employee configuration panel |
|||
55 | - Settings for system behavior and admin updates |
|||
56 | - Switch how commissions & draws are shown — % or actual bucks |
|||
57 | - **Epic theme picker with 8 presets for maximum visual hell yeah** |
|||
58 | ||||
59 | #### 2. Analytics Page (Wide Frickin’ Open) |
|||
60 | ||||
61 | - Tracks Year-to-Date stats, or whatever time range floats your fancy |
|||
62 | - Uses Chart.js because facts deserve pretty pictures |
|||
63 | - Bar, pie, line charts — you name it |
|||
64 | - Filter time ranges and export data like an absolute legend |
|||
65 | - Adaptive UI responds to theme like a mood ring for business |
|||
66 | ||||
67 | #### 3. Data Entry Page (Wide Open Like Your Inbox) |
|||
68 | ||||
69 | - Manual sales input |
|||
70 | - Commissions calculated automatically (no more math headaches) |
|||
71 | - Draw payment tracking — keep it drama-free |
|||
72 | - Upload CSVs and watch it handle bulk data like a champ |
|||
73 | - Validates your entries because your future self will thank you |
|||
74 | - Keeps the recent entries right where you can see them |
|||
75 | ||||
76 | ## Technical Stack |
|||
77 | ||||
78 | Because building badass tools needs solid tech: |
|||
79 | ||||
80 | - 🧠 **Backend**: Flask + SQLAlchemy |
|||
81 | - 🐘 **Database**: SQLite, cause it just works |
|||
82 | - 🖋️ **Forms**: Flask-WTF with CSRF defense |
|||
83 | - 🔐 **Security**: Werk-f’ing-Zeug password hashing for locked-tight sessions |
|||
84 | - 💅 **Frontend**: Bootstrap 5, sexy in all screen sizes |
|||
85 | - 📊 **Charts**: Chart.js — clean, crisp, and fast AF |
|||
86 | - 🐳 **Deployment**: Dockerized and ready to ship |
|||
87 | ||||
88 | ## Installation & Setup |
|||
89 | ||||
90 | ### Quick Start with Docker (The Way Developers Actually Do It) |
|||
91 | ||||
92 | 1. Clone this bad boy: |
|||
93 | ```bash |
|||
94 | git clone <repository-url> |
|||
95 | cd sales-tracker |
|||
96 | chmod +x setup.sh |
|||
97 | ./setup.sh |
|||
98 | ``` |
|||
99 | ||||
100 | 2. Manual Docker Compose (for control freaks): |
|||
101 | ```bash |
|||
102 | docker-compose up --build |
|||
103 | ``` |
|||
104 | ||||
105 | 3. Launch that sucker: |
|||
106 | - Visit http://localhost:5000 |
|||
107 | - Admin credentials: `admin` / `admin` (you’ll wanna change that ASAP) |
|||
108 | ||||
109 | ### Setup Options |
|||
110 | ||||
111 | **Dev Mode** — a no-pressure playground: |
|||
112 | ```bash |
|||
113 | ./setup.sh --dev |
|||
114 | ``` |
|||
115 | ||||
116 | **Production Mode** — the serious stuff: |
|||
117 | ```bash |
|||
118 | ./setup.sh --production |
|||
119 | ``` |
|||
120 | ||||
121 | **Persistent Mode** — the one that doesn’t forget your data: |
|||
122 | ```bash |
|||
123 | ./setup.sh --persistent |
|||
124 | ``` |
|||
125 | ||||
126 | Gives access at http://localhost:5001 if you're following recipes correctly. |
|||
127 | ||||
128 | ### Got Database Problems? Let’s Kick Their Ass |
|||
129 | ||||
130 | 1. Use in-container magic: |
|||
131 | ```bash |
|||
132 | docker run -p 5000:5000 -e DATABASE_URL=sqlite:///sales_tracker.db sales-tracker |
|||
133 | ``` |
|||
134 | ||||
135 | 2. Fix crappy host permissions: |
|||
136 | ```bash |
|||
137 | mkdir -p data uploads |
|||
138 | chmod 755 data uploads |
|||
139 | ``` |
|||
140 | ||||
141 | 3. Or go full persistent mode: |
|||
142 | ```bash |
|||
143 | ./setup.sh --persistent |
|||
144 | ``` |
|||
145 | ||||
146 | ### Local Dev Setup |
|||
147 | ||||
148 | 1. Get your damn Python set up: |
|||
149 | ```bash |
|||
150 | python3 -m venv venv |
|||
151 | source venv/bin/activate |
|||
152 | pip install -r requirements.txt |
|||
153 | ``` |
|||
154 | ||||
155 | 2. Fire up the beast: |
|||
156 | ```bash |
|||
157 | python app.py |
|||
158 | ``` |
|||
159 | ||||
160 | 3. Open browser → http://localhost:5000 |
|||
161 | (Or don’t. Be a rebel.) |
|||
162 | ||||
163 | ## Configuration |
|||
164 | ||||
165 | ### Environment Sh*t You Shouldn’t Forget |
|||
166 | ||||
167 | - `SECRET_KEY` — don’t check this into Git, ya dingus |
|||
168 | - `FLASK_ENV` — development or production |
|||
169 | - `DATABASE_URL` — override the default if you like pain |
|||
170 | ||||
171 | ### Defaults |
|||
172 | ||||
173 | - Admin: `admin` |
|||
174 | - Password: `admin` (again, change it dammit) |
|||
175 | - Database: `sales_tracker.db` |
|||
176 | ||||
177 | ## Usage Guide |
|||
178 | ||||
179 | ### First-Time Dance |
|||
180 | ||||
181 | 1. Load up http://localhost:5000 |
|||
182 | 2. Smash that “Admin Login” button |
|||
183 | 3. Change the password — your organization’s honor depends on it |
|||
184 | 4. Add employees like a benevolent god |
|||
185 | ||||
186 | ### Logging Sales (a.k.a. The Reason This Sh*t Exists) |
|||
187 | ||||
188 | 1. Go to Data Entry |
|||
189 | 2. Type in details |
|||
190 | 3. Let auto-commission math do its thing |
|||
191 | 4. Or bulk upload a fancy-ass CSV |
|||
192 | ||||
193 | ### Viewing Analytics |
|||
194 | ||||
195 | 1. Hit Analytics |
|||
196 | 2. Filter stuff until it tells you something useful |
|||
197 | 3. Export if your boss wants proof |
|||
198 | ||||
199 | ### Managing the Team |
|||
200 | ||||
201 | 1. Admin login |
|||
202 | 2. Edit employees or set their goals |
|||
203 | 3. Toggle display settings — % or flat amounts |
|||
204 | 4. Yell at slackers (optional) |
|||
205 | ||||
206 | ### Theme Customization (Because Vibes Matter) |
|||
207 | ||||
208 | 1. Hit the palette icon in the navbar |
|||
209 | 2. Choose one of the 8 eye-popping themes |
|||
210 | 3. Watch the app change outfits instantly |
|||
211 | ||||
212 | Themes include: |
|||
213 | ||||
214 | - Default Blue |
|||
215 | - Dark Theme (work in the shadows, baby) |
|||
216 | - Nature Green (for tree-huggin’ teams) |
|||
217 | - Royal Purple (His Royal Freshness would approve) |
|||
218 | - Sunset Orange |
|||
219 | - Ocean Teal |
|||
220 | - Corporate Red (power tie vibes) |
|||
221 | - Modern Pink |
|||
222 | ||||
223 | Settings persist for admin; guests get localStorage (so they don’t ruin your vibe). |
|||
224 | ||||
225 | ## File Structure |
|||
226 | ||||
227 | ``` |
|||
228 | sales-tracker/ |
|||
229 | ├── app.py # Main Flask beast |
|||
230 | ├── requirements.txt # Python goodies |
|||
231 | ├── Dockerfile # So your app works on my damn machine too |
|||
232 | ├── docker-compose.yml # Stack orchestration magic |
|||
233 | … |
|||
234 | ``` |
|||
235 | ||||
236 | ## API Endpoints |
|||
237 | ||||
238 | - `GET /api/sales_data?period=YTD` — give us that chart data |
|||
239 | - `GET /api/trends_data` — how the bloody hell are we doing? |
|||
240 | - `POST /bulk_upload` — shove an entire CSV down its throat |
|||
241 | ||||
242 | ## Security Features |
|||
243 | ||||
244 | - Password hashing (locked tighter than grandma’s cookie jar) |
|||
245 | - CSRF protection — no cross-site BS allowed |
|||
246 | - Session-based ownership |
|||
247 | - Input validation so you don’t feed it junk |
|||
248 | - SQLAlchemy ORM to dodge SQL injection like Neo |
|||
249 | ||||
250 | ## Performance |
|||
251 | ||||
252 | Fast as hell. Optimized frontend, backend, and everything in between. Ready to scale... maybe. |
|||
253 | ||||
254 | ## Maintenance |
|||
255 | ||||
256 | ### Backup the Damn DB |
|||
257 | ||||
258 | ```bash |
|||
259 | docker exec sales-tracker-app sqlite3 /app/sales_tracker.db ".backup /app/data/backup.db" |
|||
260 | ``` |
|||
261 | ||||
262 | ### Update This Beautiful Bastard |
|||
263 | ||||
264 | ```bash |
|||
265 | docker-compose down |
|||
266 | docker-compose up --build |
|||
267 | ``` |
|||
268 | ||||
269 | ### Check Logs Like a Debugging Ninja |
|||
270 | ||||
271 | ```bash |
|||
272 | docker-compose logs -f sales-tracker |
|||
273 | ``` |
|||
274 | ||||
275 | ## Contributing |
|||
276 | ||||
277 | 1. Fork it |
|||
278 | 2. Branch it |
|||
279 | 3. Make it better |
|||
280 | 4. Pull request and bask in glory |
|||
281 | ||||
282 | ## Support |
|||
283 | ||||
284 | Issues? Questions? Praise-singing? |
|||
7a867c | Tebby Dog | 2025-08-08 20:18:13 | 285 | File an issue on GitHub or yell at [teb](https://github.com/tebwritescode). |
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 286 | |
287 | --- |
|||
e9a39a | Tebby Dog | 2025-08-08 20:17:29 | 288 | 👑 Created by: [tebbydog0605](https://github.com/tebwritescode) |
92a6e9 | Tebby Dog | 2025-08-08 19:40:57 | 289 | 🐋 Docker Hub: [tebwritescode](https://hub.docker.com/u/tebwritescode) |
845e25 | Tebby Dog | 2025-08-08 20:28:47 | 290 | 💻 Website: [teb.codes](https://teb.codes) |