1.1 Every app is retrieve, process, present
Almost every useful internal app does three things:
- Retrieves data from somewhere: a spreadsheet, a database, another system, a website
- Processes data: filters it, calculates something, flags exceptions, combines sources
- Presents data: sends an email alert, updates a dashboard, writes a report to a folder, shows a searchable list
When someone describes an app idea, it's usually these three steps in a trench coat. Here are the most common things our clients build:
| App |
Retrieves |
Processes |
Presents |
| Vendor contract tracker |
Contract list |
Flags renewals 90 days out |
Dashboard with alerts |
| Expense checker |
Expense exports |
Matches against policy rules |
Exception report |
| Investor document search |
Folder of PDFs |
Indexes and searches text |
Search box with results |
| Portfolio snapshot |
Admin or PMS exports |
Aggregates and calculates |
One-page morning summary |
| DDQ answer library |
Past questionnaires |
Finds similar prior answers |
Suggested responses |
| Meeting note summarizer |
Call transcripts |
Extracts actions and decisions |
Summary email |
If your idea fits the retrieve, process, present pattern, it's probably buildable. The question is never really "can we build it." It's "what data does it touch and who can reach it."
1.2 The 80/20 rule and the happy path
It's very easy to build the first 80% of an app with AI-assisted coding. The last 20% takes significantly more time, because that's where security, reliability, and error handling live.
Part of that last 20% is getting off the happy path. The happy path is a coding term for the sequence of steps where everything goes exactly as intended: the right file, the right format, buttons clicked in the right order. That's how you test your own app. It's not how real users behave.
Real users create edge cases:
- Uploading a spreadsheet with a missing column
- Typing "next Tuesday" into a date field
- Clicking submit twice
- Pasting 50,000 rows when you tested with 50
An app that hasn't been tested off the happy path will break in ways that range from annoying to dangerous, like silently saving wrong data. Handling edge cases gracefully is a large part of what separates a prototype from real software.
1.3 What makes an app harder to build
Not all apps are created equal. Scope the easy version first.
| Easier |
Harder |
Why |
| Single user, private data |
Multi-user, shared data |
Logins, permissions, rules about who sees and edits what. Getting them wrong is how the analyst sees the partner's comp spreadsheet |
| Stateless (starts fresh each time) |
Stateful (remembers settings and saved work) |
Needs storage and logic to get it right for every user |
| Standalone, displays information |
Integrated, feeds other systems |
"Just pull it from the portfolio system" sounds simple and rarely is. And a bug in a fun tool is embarrassing, but a bug feeding numbers into a NAV or investor report is a real problem |
| Typing or pasting data in |
File uploads |
Letting users upload files opens a whole category of security issues |
| Showing results on screen |
Sending emails or notifications |
Easy to prototype, easy to accidentally spam your entire investor list |
| Runs when you open it |
Runs on a schedule, unattended |
Nobody's watching when it fails, so it needs monitoring and alerting to be trusted |
💡 Recommendation: If your app lands on the harder side of this table, that doesn't mean don't build it. It means you may need an experienced developer to do the hard work. Use AI-assisted coding to prototype and prove the idea, then bring in someone who does this for a living to build the difficult parts properly.
2.1 Keep it off the public internet
This matters more than anything else in this guide. A publicly reachable app will be found by automated scanners within hours, and an AI-built app that hasn't had a security review is exactly what those scanners are looking for.
Our strong recommendation: put your app behind entry authentication using Microsoft Entra, the login system your firm already uses for Microsoft 365. Entry authentication means nobody sees anything at all, not even the front page, without logging in with firm credentials first. If someone isn't a member of your firm, the app simply doesn't exist for them.
The good news is that Azure has a feature called Entra Easy Auth that provides exactly this: a hard gate in front of your entire app, and it's very easy to implement safely. You do need a developer to set it up for you, but it's a small job, not a project.
2.2 Know your data risks: PII and MNPI
Before building anything, ask what data the app will touch and whether you're allowed to put that data anywhere near an AI. Talk to us or your compliance team first, not after.
|
Investor PII |
Employee PII |
MNPI |
| The risk |
Many firms prohibit it from ever entering an AI model, and investors ask about exactly this in ODD questionnaires |
Same privacy obligations, less ODD exposure. A quick HR or comp tool still carries data protection duties |
Serious regulatory concerns if it flows into an AI model. Applies to firms dealing with public companies, including some PE firms |
| The practical rule |
Never in an AI-built app without a compliance conversation first |
Treat with the same care as investor data |
Assume it's off limits unless compliance signs off |
2.3 Start with the Guardsman CLAUDE.md file
Anyone building with Claude Code at your firm should start with the Guardsman CLAUDE.md file, a standard instructions file Claude Code reads before writing any code. It does two things:
- Puts guardrails on what the AI is allowed to do
- Tells the AI how to build for your environment: your authentication, your Azure setup, your standards
Without it, the AI makes its own assumptions, and its assumptions won't match your environment. Ask us for the current version before starting any project.
2.4 All code in the firm's GitHub, all repositories private
If your firm is doing any software development, get a GitHub Enterprise license. GitHub is where code is stored and version-controlled, and Enterprise gives the firm central control over accounts and access. Two rules from day one:
- All code goes into the firm's GitHub: Code written for the firm is the property of the firm. If it only lives on someone's laptop, you lose it when they leave, and you can't review what you can't see.
- Every repository must be private: A public repository can be read by anyone on the internet, and people accidentally publish code publicly more often than you'd think. If that code contains an API key or infrastructure details, you've handed an attacker a map. Set the firm-wide default to private and check periodically.
2.5 Be very careful with secrets
An API key is like a password that lets one piece of software talk to another. If your app pulls data from a market data provider, your portfolio system, or an AI service, it's using one. API keys, passwords, and connection details are collectively called secrets.
Anyone who gets hold of a secret can access that system, often with all the permissions of the person who created it. Malicious actors run automated tools scanning for exposed keys constantly. The rules:
- No API keys or other secrets should ever be committed to GitHub
- Secrets are never written into the code itself
- Keys should be restricted to the minimum permissions needed
- For deployed apps, secrets live in Azure Key Vault, a locked digital safe for credentials. A developer can set this up when they deploy the app, so it doesn't need to slow down your prototyping
This is one of the areas we look at hardest in code review, because it's one of the most common mistakes in AI-generated code.
2.6 Code review before deployment
Once a prototype is something you want to actually use, it needs a code review before deployment: an experienced engineer reads the code looking for security holes, reliability problems, and shortcuts the AI took.
AI-generated code often looks polished and works in a demo while containing real problems underneath: credentials in the wrong place, missing input checks, no error handling. This isn't optional for anything touching firm data. It's the checkpoint between "cool prototype" and "thing we actually run."
Guardsman can provide the code review, or if you'd prefer an independent set of eyes, we can recommend a vendor who does this well.
3.1 Your computer or the cloud
- Single-user app, just for you: keep running it on your own computer as is. Nothing wrong with that for personal tools.
- Needs to survive your computer being shut down or rebooted, or serve other people: it has to live in the cloud.
The standard way we do this is packaging the app as a container and deploying it to Azure Container Apps. A container is a self-contained bundle holding your app and everything it needs to run, so it behaves identically everywhere. Azure Container Apps runs those bundles inside the Azure environment most of our clients already use, so it sits within your existing security perimeter.
3.2 Recommended tech stack
When we review or deploy client-built apps, this is what we recommend:
| Layer |
Our recommendation |
In plain terms |
| Front end (what users see) |
React |
The most widely used framework for building app screens. AI tools produce their best code in it, and any developer you ever hire will know it |
| Back end (the logic) |
Python, running in the container |
The code that does the actual work: retrieving, processing, calculating. Python is the most common language for data work and what AI tools write best |
| Database (structured data) |
SQLite or Azure SQL, depending on complexity |
SQLite writes to a simple flat file with nothing to install, license, or maintain, and it's plenty for most internal tools. Azure SQL is Microsoft's full cloud database for apps with many users, shared data, or heavier workloads |
| Packaging |
Containers |
The app and everything it needs in one bundle that runs identically on a laptop or in Azure |
| Hosting |
Azure Container Apps |
Microsoft's service for running containers, inside your existing Azure tenant |
| Secrets |
Azure Key Vault |
A locked digital safe for credentials. API keys live here, never in the code (see section 2.5) |
| Code storage |
GitHub Enterprise, private repos |
Central firm control over all code (see section 2.4) |
| Deployment |
CI/CD via GitHub Actions |
Automated pipeline from code to cloud (see section 3.3) |
3.3 How we deploy: CI/CD
We deploy apps using CI/CD, which stands for continuous integration and continuous deployment. In plain terms, it's an automated pipeline built with GitHub Actions, GitHub's built-in automation tool. When a developer saves finished code to GitHub:
- The code is automatically tested
- It's packaged into a container
- It's pushed into Azure
No human copying files by hand. Every deployment happens the same way, there's a log of exactly what was deployed and when, and if something goes wrong we roll back to the previous version. The alternative, someone manually copying files to a server, is how you end up with "it works on my machine" problems and no record of what changed.
The Short Version
AI-assisted coding is a genuinely useful way to prototype. Use it. But before anything you build touches firm data or other users:
- Check what data it handles: Investor PII, employee PII, and MNPI need a compliance conversation first.
- Keep it behind Entra login: Never on the open internet.
- Get a code review before deployment.
- Deploy properly: React front end, Python back end, SQLite, containers, Azure Container Apps, CI/CD.
- Keep all code in the firm's private GitHub.
We're happy to help at any stage, from "is this idea feasible" to full production deployment. That's what we're here for.