Service
Web applications your business runs on
Software that lives in a browser and has users, permissions, records and rules. We design the data model and the access model first, then build it in Laravel or PHP so it can be extended for years rather than replaced in two.
- Portals, dashboards, SaaS platforms and internal tools
- Roles and permissions designed before any screen is built
- Delivered in working increments you can use as they land
- Built to be handed to another developer without a rewrite
What counts as a web application?
Anything where a user signs in and the software does work for them: a portal a client logs into, a dashboard your team runs the operation from, a subscription platform you sell access to, or an internal tool that replaces a spreadsheet three people maintain by hand. The distinguishing feature is state — records that change, permissions that govern who may change them, and rules that must hold every time. A website presents information; a web application does something with it.
- Users sign in, and what they can see and do depends on who they are
- Records move through states, and the history of that matters
- Rules and calculations must produce the same answer every time
What we build
The applications we are asked for most
Different products, one underlying shape: authenticated users acting on shared data under rules.
-
Client portals
A signed-in area where customers see their own jobs, documents, invoices or reports without emailing to ask.
- Per-account data isolation
- Document handling
- Notification rules
-
Operational dashboards
One screen showing the true state of the business, replacing a spreadsheet several people update and disagree about.
- Live operational data
- Filtering and export
- Audit trail
-
SaaS platforms
Software you sell access to, with plans, billing, onboarding and the tenant separation that has to be right from day one.
- Multi-tenant architecture
- Subscription billing
- Self-serve onboarding
-
Internal tools
The unglamorous applications that remove hours of manual work each week and never appear in a marketing brochure.
- Bulk operations
- Approval steps
- Role-based access
-
Booking and scheduling
Availability, capacity and the awkward exceptions your business actually has, rather than the ones a generic product assumes.
- Availability logic
- Capacity rules
- Confirmation workflow
-
APIs and integrations
A documented interface so your application can be consumed by another system, or can consume one reliably.
- REST API design
- Versioning
- Retry and failure handling
Where applications go wrong
The failures we are usually called in to repair
Almost none of these are coding mistakes. They are decisions taken early, cheaply, and never revisited.
-
Permissions bolted on afterwards
Access control added once the screens existed, so it is enforced in the interface rather than in the data layer and can be bypassed by anyone who guesses a URL.
-
A data model that cannot bend
Tables designed around the first customer's process. The second customer needs one extra field, and it becomes a column nobody dares remove.
-
Tenant data sharing a table with no guard
Multi-tenant separation enforced by remembering to add a WHERE clause. It works until the one query where somebody forgets.
-
Reports that lock the database
Analytics run against the live transactional tables, so generating the monthly report slows the application for everyone using it.
-
No audit trail
A record changed, nobody knows who changed it or what it said before, and the dispute cannot be resolved.
-
Deploying by copying files
No staging, no migrations, no rollback. Every release is done carefully by hand and one of them will eventually go wrong.
How we start
The data model and the permission model come first
Screens are the easiest part of an application to change and the hardest part to resist starting with. Underneath them sit two decisions that are expensive to reverse: what the records are and how they relate, and who is allowed to do what to them.
So we settle both before building interfaces. What entities exist, what each one owns, which relationships are one-to-many and which are genuinely many-to-many, what has to be soft-deleted for audit, and where tenant boundaries fall. Then the permission model: roles, the actions each role may take, and enforcement in the data layer rather than in the template. Get those right and new features are additive. Get them wrong and every feature fights the foundation.
- Entities, relationships and ownership mapped before any screen
- Permissions enforced in the data layer, not in the interface
- Tenant isolation designed in rather than remembered per query
- Audit trail on the records where history will be disputed
Scope
What a web application engagement covers
Foundations
- Data model and entity relationships
- Authentication and session handling
- Roles, permissions and tenant isolation
- Environment separation and configuration
The application
- Screens built around the tasks users actually perform
- Server-side validation on every input
- Background processing for anything slow
- Search, filtering and export where the data warrants it
Interface quality
- Responsive from 320 pixels up, tested at real widths
- Keyboard operable with visible focus throughout
- Accessible forms with clear error identification
- Tables that stay usable on a narrow screen
Data and reporting
- Reporting that does not contend with live transactions
- Export in formats your team already uses
- Import and bulk update routines
- Retention and archiving where records accumulate
Operations
- Database migrations under version control
- Deployment process with a rollback path
- Error logging and alerting
- Backups with a restore tested before launch
Handover
- Repository and documentation transferred to you
- Written architecture and data-model notes
- Runbook for deployment and common operations
- An agreed support arrangement, or a clean exit
Delivery
How an application build runs
Applications are delivered in working increments rather than revealed at the end, because the requirement always changes once people can click on something real.
-
01
Discovery
Users, roles, processes, rules, data and integrations. Charged as its own fixed-price stage, because an estimate before this is a guess.
You receive: Written specification and estimate
-
02
Architecture
Data model, permission model, integration approach, environments and the release process.
You receive: Technical design you own
-
03
First increment
The smallest slice that is genuinely usable, so the shape of the thing can be judged early rather than assumed.
You receive: A working application you can log into
-
04
Build out
Further increments in priority order, each reviewable on staging, each with the change process applied to anything new.
You receive: Reviewable releases
-
05
Test and migrate
Functional testing against the specification, permission and failure-path checks, then data migration and user setup.
You receive: Test record and migrated data
-
06
Launch and support
Planned cutover with a rollback path, training, then a defined support and release arrangement.
You receive: Live application and support agreement
Stack
What we build web applications with
Chosen for maintainability and for the fact that another developer can pick the codebase up.
Application
- PHP
- Laravel
- CodeIgniter
- Queues and scheduled jobs
- Authentication and roles
- Automated tests on business rules
Data
- MySQL
- MariaDB
- Schema migrations
- Query profiling
- Redis caching
- Import and export routines
Interface
- Server-rendered views
- Tailwind CSS
- Vanilla JavaScript
- Accessible forms
- Responsive data tables
Integration
- REST APIs
- Webhooks
- Payment and billing providers
- Email and notification services
- Third-party SDKs
Operations
- Git-based deployment
- Staging environments
- Error logging and alerting
- Uptime monitoring
- Backup and restore
Security
- Parameterised queries
- Output escaping
- CSRF protection
- Rate limiting
- Least-privilege access
- Secrets outside the repository
Questions
Web application questions
How is this different from your custom web development service?
Do you build mobile apps?
Can you take over an application somebody else built?
How long does an application take to build?
Who owns the code and the data?
What happens after launch?
Related services
Often paired with this
-
Custom web development
The wider engagement: deciding whether bespoke software is the right answer, and scoping it if so.
Custom development -
Laravel & PHP development
The frameworks these applications are built on, plus support for systems already in production.
Laravel & PHP -
Website maintenance
Applications need more care than brochure sites. This is what an ongoing arrangement covers.
Website maintenance
Have an application to build?
Describe who would use it, what process it replaces and what goes wrong today. We will tell you whether it needs building and what we would do first.