Qpackt's features

Collecting basic stats from HTTP requests

Qpackt collects simple stats from HTTP requests. Each request is matched to a visitor using their ip and user-agent fingerprinting. You can see bounce rate, average requests per visit, session duration, etc. This is done without tracking cookies.

Collecting custom events from browsers

To better monitor visitors you can send events from JavaScript. Events can have custom payload and represent any action you can think of: scrolling to the bottom, staying on the page longer than X, clicking a button, etc. This is also done without tracking cookies or local storage. You can see summary of collected events (and download full list) in admin's console. More about events

A/B testing with multiple site versions

You can deploy multiple versions of your website and then compare engagement between them. More about serving multiple versions

Rolling a new version of your website

To prevent missing links (or missing parts of an SPA website), you can gradually roll new sessions to the new version and keep existing sessions on the old one. After a day/week, you can safely remove the old version. More about serving multiple versions

Splitting traffic based on a URL param

When you control the link to your website (like paid ads) you can add a special url parameter to each link. Then you can compare engagement based on the source link. More about serving multiple versions

Reverse proxy for backend application

HTTP server wouldn't be fully functional without a reverse proxy. Qpackt allows you to proxy traffic to another app.

Automatically fetching SSL certificate from Let's Encrypt

Qpackt can automatically fetch an SSL certificate from letsencrypt.org. All you need to do is to enable SSL proxy in the config file.

GUI configuration

Most of the stuff above is configured via GUI. Only the initial setup/installation is via a console.

Planned futures

Below are some ideas that we think would be cool. Keep in mind that the list below is really haphazard and some duplicates may happen. If you think anything below is worth implementing, let me know by creating an issue (and giving a star) on GitHub