PHP web apps

PHP web application development for portals and internal tools

We turn the spreadsheet, the email thread and the half-working legacy system into one application your staff and customers sign in to. Planned from the data model up, tested, and deployed from a repository you own.

  • Built by our own staff
  • Data model before screens
  • Tested before every release
What is included
  • Data model first
  • Permission system
  • Queued and scheduled work
  • Files and documents
  • Reporting and exports
  • Tests and deployment
Get a free quote Reply within one business day. NDA on request.
The problem

Signs you have outgrown the spreadsheet

A web application usually starts as a process that has outgrown its tools. Orders tracked in a shared spreadsheet. Approvals that live in one manager's inbox. A customer who phones to ask for a status that three people have to look up. At some point the workaround costs more than software would.

We build that software in PHP: client portals, operations dashboards, booking and scheduling tools, quoting systems and back offices. The screens are rarely the hard part. Deciding what the records are, who may see and change them, what has to happen in the background, and how a release reaches production without anyone holding their breath takes most of the thinking. This page walks through how we handle each of those. If you are still comparing technologies, our stack-neutral web application development page covers that ground.

  • The process lives in people's heads

    Rules about who approves what, which customers get which price and when a job counts as done were never written down. New staff learn them by making mistakes.

  • One shared login for the whole office

    Access is a shared password or an all-or-nothing admin flag. You need a regional manager to see her region, a client to see his own orders, and an auditor to see all of it without editing.

  • Slow jobs freeze the screen

    Importing a large file, generating a batch of PDFs or emailing a few thousand people runs inside the page request. The browser spins, times out, and nobody knows what was processed.

  • Releases are a risk event

    Updates go live by copying files to the server on a Friday evening. There is no staging site, no rollback, and every release brings back a bug that was fixed last month.

What we do

Foundations under every screen

Whatever the application does for your business, it rests on the same foundations. We plan and build each of them deliberately instead of letting them emerge by accident.

Data model first

Entities, relationships and status values agreed on paper before screens are drawn. Foreign keys, unique constraints and migrations keep the database honest as the application changes.

Permission system

Roles made of named permissions, checked in one policy layer and enforced on records as well as menus. A hidden button is not access control.

Queued and scheduled work

Imports, exports, emails and report generation pushed to a queue with retries, progress and a failed-jobs list an admin can act on. Scheduled work runs from one cron entry.

Files and documents

Uploads validated, scanned for malware where required, stored privately on disk or object storage and served through permission-checked download links. Generated PDFs and spreadsheets follow the same route.

Reporting and exports

Dashboards built on indexed queries or summary tables, filters that match how managers ask questions, and CSV or Excel exports that run in the background for large date ranges.

Tests and deployment

Unit tests for rules, feature tests for the main paths of each role, and a pipeline that runs them before a scripted, repeatable deployment with a rollback step.

Typical projects

PHP applications we build most

01

Customer portals

Customers sign in to see orders, invoices, documents and support tickets that belong to their company only, while staff work the same records from a back office.

02

Dashboards for daily operations

Jobs, deliveries, stock or cases shown by status and owner, with the exceptions of the day on top. Built for the screen your team keeps open from morning to evening.

03

Booking, quoting and scheduling tools

Availability rules, price logic, confirmations and reminders, calendar views for staff and a customer-facing flow that works on a phone.

04

Back offices for existing products

An admin application placed next to a website, store or mobile app to manage users, content, refunds and reports without touching the database by hand.

In depth

Five decisions inside every PHP application

Requirements become a data model

We start by listing the nouns: customer, site, job, visit, invoice. Then come the awkward questions. Can a job belong to two sites? Is a canceled invoice deleted or kept? Who is the customer when an agency books for its client? The answers become tables, relationships and status fields, and we review that model with you before design begins. Getting it right at this stage is cheap. Changing it after a year of live data is the most expensive kind of change request there is.

Access rules checked in one place

Every application ends up with more roles than planned. We define permissions as small named abilities, such as "approve quotes" or "export customers", group them into roles, and check them in one place in the code. Two rules matter most. Permission is enforced on the server for every request, never only by hiding a menu item. And it is checked per record: being allowed to view invoices does not mean being allowed to view another company's invoice by changing the number in the address bar.

Why slow work leaves the page request

PHP serves each request from a worker process with a time limit, and a server has a fixed pool of those workers. A report that runs for two minutes inside a page request ties one up, and a few impatient users clicking again can exhaust the pool for everybody. So anything slow, or anything that calls an outside service, is recorded as a job and picked up by a separate command-line worker. The user gets an immediate acknowledgment and a notification when the job finishes. Jobs are written so that running one twice does no harm, since retries are a fact of life. On modest hosting the queue can be a jobs table drained by cron. Either way, failures have to be visible to an admin and not buried in a log file.

Files, reports and the slow creep of data

Uploads never sit in a public folder. They are stored privately and streamed through a controller that checks who is asking, with size limits set on purpose in the PHP and web server configuration before a client meets them by accident. Spreadsheet imports are read in chunks so a large file cannot exhaust the PHP memory limit. Reports are where applications slow down as tables grow, so we write them against indexes we planned for, paginate everything, and move heavy summaries to nightly tables when live queries stop being quick.

Testing and getting to production

The main paths of each role are covered by automated feature tests: sign in, create, approve, export. Rules with money or dates in them get PHPUnit tests with the edge cases spelled out, and PHPStan checks the whole codebase for type errors. The same pipeline builds the release. Composer installs the locked dependencies, migrations run, the opcode cache is reset and traffic switches to the new release folder, with the previous one kept for rollback. Most of these applications sit on a framework, usually through our Laravel application development team, and a public or mobile interface is added through PHP API development when it is needed.

Process

How the build is sequenced

  1. 1

    Walk the current process

    We map users, records and the current process with the people who do the work, and turn it into a scope with priorities you agree to.

  2. 2

    Model and wireframes

    The data model and clickable wireframes are reviewed together, so structural questions are settled before visual design and code.

  3. 3

    Vertical slices on staging

    Features are delivered to staging in vertical slices, each usable from sign-in to saved record, with a demo at every milestone.

  4. 4

    Role-by-role testing

    Testers sign in as each role with realistic data, on desktop and phone, while automated tests guard what has already been accepted.

  5. 5

    Go-live in groups

    Data is imported, users are invited in groups, and we watch logs and queues closely during the first weeks before planning the next round.

Deliverables

Handed over at the end

  • A data dictionary and a who-can-do-what table
  • An application your staff can use on a phone
  • Background processing with visible job status
  • Automated tests and a deployment pipeline
  • Source code, database and hosting accounts you control
FAQ

Before you commission a web application

Do you design the interface as well as build it?
Yes. Our designers produce wireframes and visual designs before development starts, and you review them at each stage. Details are on our UI/UX design page. If you already have designs or a design system, we build to those.
Can the application replace our spreadsheets in stages?
Yes, and we recommend it. We usually start with the process that hurts most, import the existing spreadsheet data, and run the first module with a small group. Further modules follow once that one is trusted.
Do you always build on a framework?
Nearly always. For most multi-role applications we use Laravel, and CodeIgniter when hosting is limited or your team already knows it. Very small tools may need no framework. The choice is explained in the proposal, with reasons you can question.
How do you handle our existing data?
We write import scripts and treat them as part of the project. Data is cleaned, loaded into staging and checked by your team, and the import is rehearsed more than once so the final run on launch day is routine.
Will it work with the systems we already use?
Usually. Accounting packages, payment gateways, email services and CRMs generally offer APIs, and we connect to them through queued jobs so an outage on their side does not break your screens. Where a system has no API we look at file exports or database access.
What does the cost of a web application depend on?
The main drivers are the number of roles, the number of distinct screens and workflows, integrations with outside systems, and how much data must be migrated. We break the quote into milestones so you can see what each part involves and trim the scope with full information.
Who looks after the application once it is live?
That is your choice. We offer ongoing support and further development under a monthly arrangement, and you can keep the same developers who built it. Because the code and documentation are yours, an in-house team can take it over at any point.
Start a project

Describe the process you want off the spreadsheet

Tell us who uses it, what they do today and what goes wrong. We come back within one business day with questions and a suggested first milestone, and the quote is free.

  • Free consultation and quote
  • NDA on request
  • You own the source code
  • Reply within one business day
Add budget and timeline optional, helps us quote faster

This form is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.