Qroperty
Turn property addresses into trackable QR codes and short links for real estate professionals.
Status
| Status | Active |
| Type | Personal Project |
| Version | 0.20.0 |
Links
Overview
Qroperty helps real estate professionals create memorable short links and QR codes for property listings with built-in analytics to track engagement. Agents can create custom slugs like qroperty.link/123-main-street and generate high-resolution QR codes for print materials, window displays, and business cards.
Key Features
Property Links
- Short, memorable links from property addresses
- Custom slugs with permanent IDs (QR codes stay valid even if slugs change)
QR Codes
- Auto-generated high-resolution codes for every link
- Download in PNG or SVG format
Analytics Dashboard
- Track total scans and views over time
- Device breakdown (mobile, tablet, desktop)
- Geographic location tracking (country and city)
- Top-performing properties
User Management
- Email/password authentication with verification
- Password reset via email
Subscriptions
- Free: 5 property links, basic analytics
- Pro: 50 property links, full analytics, priority support
- Team: Coming soon
Admin Dashboard
- User management (super admins only)
- Ban/unban users
- System-wide statistics
Tech Stack
- Frontend: Next.js 16, React 19, Tailwind CSS 4
- Backend: Convex (real-time serverless database)
- Payments: Stripe
- Email: Resend
Setup & Development
# Clone and install
git clone https://github.com/sphereboy/qroperty.git
cd qroperty
npm install
# Set up environment variables
cp env.example .env.local
# Fill in Convex, Stripe, and Resend credentials
# Start development (two terminals)
npx convex dev # Terminal 1: Convex backend
npm run dev # Terminal 2: Next.js frontend
Scripts
npm run dev # Start Next.js dev server
npm run build # Production build
npm run lint # Run ESLint
npx convex dev # Start Convex dev server
npx convex push # Deploy Convex to production
Architecture
Dual-View Architecture
The app has separate desktop and mobile views:
- Desktop views:
app/pages wrapped inAppLayout - Mobile views:
components/mobile/(rendered when viewport < 640px)
Key mobile components:
MobileHome- Dashboard homeMobileSettings- Settings with drill-down navigationMobileAnalytics- Analytics viewQRCardStack/QRFullScreen- QR code views
Convex Backend
All backend logic lives in the convex/ directory. Key conventions:
- Function types:
query,mutation,action(public) andinternal*variants (private) - Database: Always use
.withIndex()instead of.filter()for queries - Actions: For external API calls (Stripe, Resend), use
"use node";directive
Git Conventions
Uses commitlint with conventional commits:
type(scope): description
Types: feat, fix, chore, docs, style, refactor, test, perf
Handoff Notes
Required credentials for Convex, Stripe, and Resend. See env.example for the full list.