We have 10,000 graphs to create.

Don’t bother. Hook up your database to Grafana and let your client create their own dashboards.

We have massively complex code producing huge data reports.

It’s time to put the logic back into the database and use Views. Create your joins etc in the database, and materialize your monolith chaos as a Materialized View with a unique index so it can be refreshed every few minutes. Better still, use NoSQL aggregation pipelines.

We need a massive, YUGE, enormous database.

You don’t need a database, you need a cluster. And that means Apache Cassandra when they get round to updating the PHP extension .

We want to build our own PHP extension.

Not the best idea but if you’re insistent, the quickest way is using Zephir .

We need to talk to USB, Bluetooth, and VR headsets from the browser.

Take a look at WebUSBWeb BluetoothWebXRVibrationWebNFCWeb Serial.

We don’t want to keep SSHing in to debug errors.

Then you’re going to need to install Graylog  or Seq + GELF input in a Docker container.

We need to cache static output of HTML/JSON.

If it’s read-only and unlikely to change, you’ll need Varnish. It doesn’t do SSL, so you’ll need something like Pound or HAProxy in front of it.

We need to share .env files and sensitive info.

If it’s time to leave the password manager, look at Envault or Zookeeper.

We need to secure a program which doesn’t have SSL.

You need sTunnel or Nginx as a reverse proxy with basic auth. Think VPN.

We need to virus-scan uploads.

Use Clam-AV in your request validator

We need to do facial detection/recognition in Laravel.

The quickest way is AWS Rekognition but if you are rolling your own, start with OpenCVFacePlusPlus, and Open Biometrics.

We want to do Machine Learning in Laravel.

Bad idea. Use Python. You’ll want to start with PHP-ML and Rubix ML. For NLP, there is NLP Tools

We want to build a command line program like Composer with Laravel.

Use Laravel Zero which creates executable Phar archives using the Box Project. Put it in a Docker container and take a look at Roadrunner and Franken-PHP.

We need our staging servers to be on a VPN.

Use Wireguard or OpenVPN. If you need a privacy proxy, use Streisand. For OpenVPN, use a setup installer, copy your .ovpn file to /etc/openvpn/something.conf and run systemctl start openvpn@something.

We need to load-balance Docker containers.

Use Traefik.

We need to check text for profanity and writing quality.

Don’t attempt to build a profanity filter. Use WebPurify and the ProWritingAid API.

We need to customise Nginx.

Nginx is small and fast because it’s designed that way. If you want to do more advanced programming in its native language (Lua), you will need to look at Open Resty.

We need to build a “find-my-nearest” app.

Then you’re creating a geometric proximity query service which uses the Haversine Equation. You’ll need a package which works with a geospatial index on a PostGIS or NoSQL database plugin.

We need our own Git server.

Use Gitlab.

We need to do SSO and SAML or ActiveDirectory.

Good luck. Your best bet is to reserve a server to run Gluu. ActiveDirectory is LDAP.

We want to do advanced image processing and url-based manipulation.

For interpreting things like PSD, EPD etc as well as complex effects you can’t do in HTML5, there’s ImageMagick. For Cloudinary-style hosting, you can do worse than Thumbor or Imageflow.

We want to build a desktop application in PHP.

Why? Use PHP-Qt, or PHP Desktop. Most modern approaches use ElectronJS.

We need to do chat and instant messaging.

Don’t write it yourself. If you can’t use an external API, look at programs with Websocket integration like eJabberD or Openfire.

We want to use Websockets.

Laravel comes with Pusher and Reverb out of the box, but you essentially have two alternatives: Crossbar, NATS, and Centrifugo. All have JS libraries but the latter comes with JWT authentication.

We don’t want to send test emails to real email accounts.

Use MailTrapMailHogMailDev, or set up your own Dovecot server.

We need a free code quality analyser.

Use the open-source tool SonarQube.

We need to do server-side document scanning.

You’ll need Tesseract for OCR, LibreOffice’s Uniconv for converting documents, and something like a PDF library.

We need our own actual, real search engine instead of a database.

Good. Databases are not search engines. The gold standard is Elasticsearch, but there is also Manticore if you need a shortcut. It’s not as difficult as you think.

We want our own version of Amazon S3.

Use Minio.

We need a better version of Supervisor.

It’s been ported to Go Also think about using forked SystemD unit files.

We need to set up a lot of version-controlled database servers.

Then you’ll need a way of versioning them like LMM. You can use Liquibase to manage the changes, and a read/write-configured proxy like MySQL-Proxy for local devs.

We need to take screenshots of web pages.

This is done with a “headless” browser taking a screen capture. You can use Puppeteer or WKHTMLtoPDF.

We’re thinking about using a graph database.

Use Neo4J with the Eloquent extension.

We need to build an IoT application.

Then you will need a MQTT library and backend server like Mosquitto or HiveMQ. You’ll probably need Influx and Telegraf too.

We want to do our own document signing.

You’ll need to start with SignServer.

We need to do automated video encoding.

You’ll need a package to manipulate FFMPEG which puts items into queues.

We need to apply complex audio effects to sound files.

You need SoundeXchange or “SoX”, which you can use with a command line package like Symfony Console.

We need to stream our own audio and video.

For audio, use Rocket Broadcaster. For video, use Wowza Media Server or Nginx with its RTMP extension.

We want to build our own mapping service.

Use OpenStreetMap and its tools. If you want your own Gmaps to do your own cartography, look at MapServer.

We need to talk to desktop programs.

If you’re not using COM extensions on Windows, many of them come in “headless” versions, like Adobe InDesign Server.

We can’t get access to a server behind a NAT router.

Use Ngrok for simple requests (e.g. Web hooks) or go the whole way by getting the machine onto OpenVPN .