COMP30022 IT Project · The University of Melbourne · 2021 → revived 2026
Remember the people you meet, and where you met them.
4399 CRM is a mobile-first personal CRM: an address book, a log of every meeting with a place on the map, and QR codes for swapping details in person. Built by Team 4399 for the University of Melbourne's IT Project, now running again on a modern, free stack.
No sign-up needed: the guest sandbox is a private copy of 25 contacts and 40 Melbourne meetings, deleted after 24 hours. Or watch the three-minute tour.
The brief
What the coursework asked for
COMP30022 is the University of Melbourne's capstone IT Project. In Semester 2, 2021, teams of five worked with a client to design, build, test and deploy a personal customer relationship manager: a web app where someone can keep track of the people in their network and their interactions with them, with secure accounts, search, and a deployment the client can actually use. Teams ran the project in Scrum sprints and handed in the code, tests and documentation.
Team 4399 built a phone-first single-page app (designed at 375 × 812, iPhone X) backed by a REST API: contacts with any number of phones and e-mails, meeting records pinned on Google Maps, QR-code contact exchange, e-mail verification and “fast register” invitations for contacts who weren't users yet.
What you can do
Everything from the original, working again, plus three additions
The search, sorting, validation, duplicate detection and contact-sync rules are ported from the 2021 code and covered by parity tests. The 2026 additions (insights, data rights and an optional AI assistant) are explained, with their weak spots, on the methods page.
A proper address book
Multiple phones and e-mails per person, notes, custom fields and an optional photo. Search any field and sort the list, exactly as the 2021 app did.
Swap details with a QR code
Every account has its own code. Scan someone else's (camera or photo) or type their user name, and their own profile becomes a linked contact.
Meeting records
Log who you met, when, and exactly where - pick the spot on a map or search for the venue - plus notes and follow-ups.
Map and calendar views
See every meeting as a pin with a date-range filter, or browse them month by month on a calendar.
Linked contacts stay fresh
When a contact has an account, one tap syncs their latest name, phones, e-mails and occupation. Invite the rest by e-mail.
Verified sign-up
E-mail verification codes, password reset and invitations - delivered to an on-screen demo inbox instead of a real mailbox.
Insights with honest error bars
Meetings per week with a seeded bootstrap interval, a weekday-by-hour heatmap, and the people you have not seen in a while.
Your data, your call
Download everything as JSON or CSV, see what was done through your account in an append-only activity log, or delete the account and all of it for good.
Optional AI, your own key
Summarise a meeting note with Claude or OpenAI using your own key. Personal details are removed in your browser first, and nothing is added to the meeting until you accept it.
40
REST endpoints in the Express back-end, ported to Server Actions
6 → 7
Mongoose models re-modelled as SQLite tables
21
Jest test files in the original back-end
375 px
the iPhone X viewport the team designed for
Take it for a spin
Open your own guest sandbox, add someone by scanning a QR code, log a meeting on the map, then check the demo inbox when you sign up or invite a contact. Or watch the same journeys first in the recorded tour.
About this project
COMP30022 IT Project
- University
- The University of Melbourne
- Offering
- 2021, Semester 2
- Team
- Team 4399 (Group 49)
Team 4399
- Bin Liang · Back-end lead
- Hongji (Harrison) Huang · Communication lead, original repository owner
- Wei Zhao · Front-end lead
- Yixiao Tian · Communication lead
- Sunchuangyu (Rin) Huang · Scrum Master, front-end (contacts, records, map)
Academic integrity: the original 2021 submission is preserved unchanged (apart from removed credentials) in the repository's coursework/ folder for reference. This revival is a portfolio piece, not a resubmission.
2021 submission
- React 16 (Create React App), Material UI, React Router
- Express 4 + Mongoose 5 on MongoDB Atlas
- Passport local + JWT in localStorage
- Google Maps + Places autocomplete
- Gmail SMTP via nodemailer
- Heroku (API) and Heroku / Netlify (client)
2026 revival
- Next.js 16 App Router, React 19, Tailwind CSS 4
- SQLite via libSQL + Drizzle ORM (Turso in production)
- Signed httpOnly session cookies (jose), bcrypt
- MapLibre GL + OpenFreeMap tiles, Photon geocoding
- Demo inbox stored in the database
- Optional bring-your-own-key AI with redaction and an audit log
- Vercel, with an offline basemap fallback
What changed on the way back
The MongoDB Atlas cluster, Gmail account and Google Maps key are gone (and their old credentials are never used). Data now lives in SQLite, e-mails go to a demo inbox, maps use free OpenStreetMap-based services, and avatars are generated initials instead of uploaded photos.