English | 简体中文
QRent is an AI-powered rental platform built for international students in Australia. It helps students find housing smarter and faster by analyzing commute time, budget, and area data to recommend the most suitable rentals — all in one place.
This year, we achieved 4.2K active users and over 10K page views. During peak rental season, our DAU reached 200+ and MAU reached 1,500+.
-
AI-Driven Recommendation System: From an international student's perspective, we score and recommend properties based on commute time, budget, lifestyle, and rental success rate. Next, we'll focus on building an agentic-assisted rental experience to minimize housing difficulties caused by information asymmetry.
-
Tailored Experience: We specialize in providing customized information services for international students in Australia, ensuring every user finds the most suitable accommodation. We will continue to expand our service offerings with the goal of providing end-to-end solutions.
-
Smart Filtering: Through intelligent search and filtering options, users can quickly narrow down property listings based on their school location and find the most suitable options.
-
All-in-One Experience: We aggregate quality rental listings from across the web, allowing users to compare, filter, and book on a single platform without switching between multiple websites. We will continue to expand property sources to enhance user experience.
Before you begin, ensure you have the following installed:
- Node.js 20 or higher
- pnpm 8 or higher
- Docker (optional, for running backend dependent services)
You have two main options for development based on your needs.
This option uses the production backend API, perfect for frontend-only development.
-
Configure environment: Create a
.envfile in the project root and fill in. So frontend will use the online backend API.:NEXT_PUBLIC_BACKEND_URL=https://api.qrent.rent
-
Install dependencies:
pnpm install
-
Build the frontend:
pnpm --filter packages/frontend build # same effect as cd packages/frontend && pnpm buildThis will first generate Prisma client code, build the backend project, then build the frontend to obtain the tRPC type information.
-
Run the development server:
pnpm --filter packages/frontend dev
This option runs both frontend and backend locally.
-
Configure environment: Create a
.envfile in the project root and configure backend-related fields. See.env.examplefor reference:cp .env.example .env
Edit the
.envfile and fill in database, backend and redis related fields at minimum. -
Start backend services:
With Docker:
docker compose up -d db redis
Start all services except the backend service itself, those are backend dependent services.
Without Docker: Manually install and start all services defined in
docker-compose.ymlexcept the backend service, then configure their connection details in.env. -
Install dependencies:
pnpm install
-
Generate Prisma client:
pnpm --filter packages/shared db:generate # Generate Prisma client code and type definitions pnpm --filter packages/shared db:push # Synchronize schema to database
-
Run the backend:
pnpm --filter packages/backend dev
If successful, you should see:
> @qrent/[email protected] dev /home/wiperi/qrent/packages/backend > NODE_ENV=development ts-node-dev -r tsconfig-paths/register -T src/server.ts [INFO] 00:19:50 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.2, typescript ver. 5.8.2) 🔄 Loading: /home/wiperi/qrent/.env ⚡️ Server started on port 3201 at 0.0.0.0 You have 0 users in your database You have 0 properties in your database -
Run the frontend (in a new terminal):
pnpm --filter packages/frontend dev
Check out terminal outputs for port numbers of both backend and frontend.
- API Documentation - Backend API reference (REST Version, Same effect as tRPC)
We welcome contributions and discussions from the community!
- Report Issues: Found a bug? Open an issue
- Discussions: Have questions or ideas? Start a discussion
- Email: For partnership or general inquiries, contact us at this email
Contributions to QRent are welcome! We follow the Conventional Commits specification for commit messages.
Each commit message consists of a type, scope (optional), and subject:
<type>(<scope>): <subject>
Examples:
feat(frontend): add property comparison feature
fix(backend): resolve JWT token expiration issue
docs: update README with new setup instructions
chore(deps): update dependencies
feat: A new featurefix: A bug fixdocs: Documentation changesstyle: Code style changes (formatting, semicolons, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks, dependency updates
New to the project? Check out issues labeled good first issue - these are great starting points for newcomers to get familiar with the codebase.
Before contributing, please:
- Fork the repository
- Create a feature branch (
git checkout -b feat/amazing-feature) - Commit your changes following the commit message format
- Push to your branch (
git push origin feat/amazing-feature) - Open a Pull Request
- Frontend: Next.js 15, React 19, Tailwind CSS v4, tRPC
- Backend: Node.js, Express, tRPC, Prisma ORM
- Database: MySQL 8.0
- Cache: Redis
- Scraper: Python with Playwright
- Monorepo: pnpm workspaces
This project is licensed under the Non-Commercial License (NCL 1.0).
You may use, copy, modify, and distribute the code for non-commercial purposes. Any commercial use requires a separate commercial license from the maintainers. See LICENSE for details.

