Xee Works

For technical teams.

If you're the person who'll inherit what we build, this page is for you: what we use, how we work, and what you get at the end.

You own it

When the work is paid for, the code is yours: the repository, the database schema, the deployment scripts and the documentation. We hand over a Git repository with its full history, not a zip file. See section 5 of our client terms.

The stack

  • C# on .NET, on the current long-term-support release, with ASP.NET Core MVC rendering pages on the server.
  • SQL Server, through Entity Framework Core migrations; one idempotent script builds or upgrades a database.
  • htmx for the few places a page updates in place. Pages work without JavaScript.
  • Tailwind CSS built from design tokens, with light and dark themes.
  • Background jobs on Hangfire; PDFs from QuestPDF; payments through Payfast.
  • A modular monolith: one deployable app, with each area (invoicing, CRM, projects and so on) in its own folder and database schema, talking to others only through small published contracts. A test fails the build if a module reaches into another.

We use the framework before we add a library, and we don't add layers the app doesn't need. That keeps the codebase small enough for one developer to understand.

Hosting

Our default is Windows Server and IIS on South African hosting that we manage, with nightly encrypted backups. We can deploy to your own servers or cloud instead; the deployment is a script, not a person.

Security

  • Built against the OWASP Top 10 and ASVS level 2 for anything behind a sign-in.
  • Passkeys first, or a password with a one-time code; sign-in is checked against known breached passwords.
  • A strict content security policy, protection against cross-site request forgery on every form, and an audit log of who did what.
  • Webhooks are stored as received and processed once; payment notifications are checked against the provider's signature, its addresses and its own confirmation.
  • POPIA built in: a map of every piece of personal data, retention rules that run on their own, and tools to export or erase a person's data.

Testing

Automated tests cover the rules that matter (money, numbering, permissions, the module boundaries), and run in continuous integration on every push. A browser test walks every page, checks it for accessibility, and fails on any error in the console.

What you get at handover

  • The repository, with a README that gets a developer running in one command.
  • A runbook: deployment, backups, restores, and what to do when something breaks.
  • A decisions log explaining why things are the way they are, and a risk register.
  • A user guide for your team, and the privacy documents for your information officer.

Support

After go-live there's a 90-day warranty, then an optional month-to-month care plan: hosting, updates, monitoring and a set number of hours for changes. If you'd rather your own team takes it over, we'll spend time with them until they're comfortable.

Want to talk to the developer who'd build it? Get in touch and ask for one of us by name.