Skip to content
All projects
Software EngineeringCompleted2025

Rent Tracker

Rent Tracker is a rent-management web app built with a teammate for a full-stack module at HWR Berlin. It covers the everyday admin of a small landlord — apartments, tenants, agreements and per-month payments — and layers on a reminder system that computes which rents are still outstanding and pushes them out over Telegram or email on a schedule each user sets.

Role
Co-developer (team of 2)
Year
2025
Status
Completed
Category
Software Engineering
Tools & technologies
PythonFlaskJinja2SQLiteAPSchedulerpython-telegram-botSendGrid
Rent Tracker cover — an editorial grid suggesting a rent-payment schedule.

The problem

Small private landlords track rent in spreadsheets or memory and lose sight of which tenant has paid which month. Rent Tracker centralises that record and turns “did they pay?” into an automatic monthly reminder.

Context

A Full-Stack Web Development module at HWR Berlin, summer semester 2025 (the project ran April–July 2025). The two of us split the work fairly evenly across routes, the reminder service, and the integrations.

Process

Computing what’s outstanding

The core logic isolates reminder computation in a single service: the unpaid-rent window is computed over a rolling range of months and cross-referenced against a set of already-paid (apartment, month) pairs for fast lookups. A nightly job then fans out to each user’s chosen channels.

  • CRUD for apartments, tenants, agreements and payments, scoped per user
  • Signed, time-limited tokens for email confirmation and password reset
  • Per-user reminder day and Telegram/email channel toggles

Key decisions

Channel-agnostic reminders

Delivery is driven by per-user flags (use_email / use_telegram) and a reminder-day field, so the same nightly job can fan out to either or both channels. A standalone Telegram bot polls a token-authenticated JSON API for users due today.

Outcomes

  • Delivered a working two-integration app (Telegram bot + SendGrid email) on a Flask/SQLite stack, with auth, email confirmation and token-based password reset.
  • Completed and submitted on deadline with substantial documentation — architecture, data model, design decisions, three rounds of Figma iterations, and a user evaluation.

Lessons learned

  • The persistence layer ended up split between SQLAlchemy for the user model and a hand-written raw-SQLite layer for everything else — convenient at the time, but an inconsistency I’d unify if I revisited it.
  • Coursework scope meant shipping without an automated test suite or CI, which I’d treat as non-optional next time.