Appraisal App
A web application for real estate appraisers.
Technologies
- Next.js
- PostgreSQL
- Prisma
Background
A friend of mine owns and operates a real estate appraisal company and I was trusted with setting up their technology infrastructure — office network, file server, backup solution, etc. Part of the work I did was developing a database application to drive operations and manage their business workflow. At the time I had been interested in the FileMaker platform and built the application with that. It’s a low-code platform built on a relational database model with light frontend integration, which has many limitations. I recently decided it was time to use my full-stack web development skills, which have since been honed, and build them a new application from the ground up.
The Project
This new appraisal management app (creatively code-named "Appraisal App") is a project I was excited to get started on and has been a fun experience to continue to develop.
While the original FileMaker app I built them was bespoke, I am creating this new app for a broad user base and it will be a publicly available SaaS. This means I must take all that I have learned from their business, along with additional industry research and build with a more generalized and scalable approach.
It is still in active development and not yet live, as I’ve been focusing intently on ensuring it has a rock-solid, secure, scalable, and performant foundation before I proceed to build out all of the features. If businesses will rely on this software, I cannot compromise on anything and must leave no gaps or vulnerabilities. User data security comes first, followed by performance and reliability.
I opted for a monorepo structure with this project using Turborepo, dividing it into the marketing site and the core protected app. The goal is to reduce complexity and improve scalability. In addition to the two main apps, the monorepo includes several packages for shared configuration, utilities, and UI components. Again the goal with that is to keep things DRY and maintainable (core tenets of my development philosophy) and in the case of the components, to ensure strong, consistent branding and UX across the platform.
The core app is built with Next.js and the marketing site, which I haven’t developed yet, will either use Next.js as well or I may opt for a lighter weight platform like Astro, which I haven’t worked with yet but have heard good things about in terms of speed and performance. Actually, as I’m writing this I think I’ll go with Astro. You sold me.
Technologies
- Kinde - There are many options when it comes to setting up auth and I weighed several, including open source solutions like NextAuth/Auth.js and hosted services like Clerk and Kinde. While NextAuth gets the job done, I haven’t had good experiences with it in the past and with my aspirations of this app scaling to trillions of users (there’s an entire untapped market across the galaxy), I wanted a dedicated, reliable solution for both auth and user management. After some research and experimentation, I opted to go with Kinde. The DX is great and implementation was a breeze. Their documentation is pretty good and I had no issues getting things set up. They’re not a paid sponsor but I’d be happy to write up a full post on my experience (Kinde folks, if you’re listening).
- Prisma - A great ORM that I use to interact with my core Postgres DB. The easy integration and full type safety make this a must have.
- Zod - A go-to, I’m using this for all schema validation in the app. In combination with some utilities from the validator.js library, I’ve set up a comprehensive multi-layer strategy for security and data integrity.
- Tanstack (React) Query - Another go-to. I’m using this for client-side requests, server-side fetching, and caching of data from my DB. A widely used library I won’t go into detail on.
- AG Grid - I’m still in the process of implementing tables and data grids, but I think I’ve decided to give AG Grid a shot. I’ve used headless libraries like Tanstack Table but I like a lot of the enterprise-level features and extensibility that AG offers and am looking forward to exploring more.
There’s much road still to be traveled on this project journey, but I’m committed and excited to release it to the public and see how businesses use my product to improve their operations.
Please feel free to follow along with my development on GitHub. Just don’t steal my idea!