mirror of
https://github.com/phpmon/website
synced 2025-12-21 11:20:07 +01:00
Added privacy policy, upgrades
This commit is contained in:
25
app/Http/PrivacyPolicyController.php
Normal file
25
app/Http/PrivacyPolicyController.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use Illuminate\View\View;
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
|
||||
final class PrivacyPolicyController
|
||||
{
|
||||
public function __invoke(): View
|
||||
{
|
||||
$markdown = file_get_contents(resource_path('markdown/privacy_policy.md'));
|
||||
$content = (new CommonMarkConverter)->convert($markdown);
|
||||
|
||||
$timestamp = filemtime(resource_path('markdown/privacy_policy.md'));
|
||||
$modified = date('Y-m-d', $timestamp);
|
||||
|
||||
return view('privacy-policy', [
|
||||
'content' => $content,
|
||||
'lastUpdated' => $modified,
|
||||
]);
|
||||
}
|
||||
}
|
||||
27
app/Http/ReleaseNotesController.php
Normal file
27
app/Http/ReleaseNotesController.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use Illuminate\View\View;
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
|
||||
final class ReleaseNotesController
|
||||
{
|
||||
public function __invoke(): View
|
||||
{
|
||||
$path = public_path('builds/early-access/sponsors/changelog.md');
|
||||
|
||||
if (! file_exists($path)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
$content = (new CommonMarkConverter)
|
||||
->convert(file_get_contents($path));
|
||||
|
||||
return view('changelog', [
|
||||
'content' => $content,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -4,21 +4,13 @@
|
||||
|
||||
use App\Http\Redirection;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
|
||||
Route::get('/', fn () => view('homepage'));
|
||||
|
||||
Route::get('/early-access/release-notes', function () {
|
||||
$path = public_path('builds/early-access/sponsors/changelog.md');
|
||||
if (file_exists($path)) {
|
||||
return view('changelog', [
|
||||
'content' => (new CommonMarkConverter)
|
||||
->convert(file_get_contents($path)),
|
||||
]);
|
||||
} else {
|
||||
abort(404);
|
||||
}
|
||||
});
|
||||
Route::get('/privacy-policy', \App\Http\PrivacyPolicyController::class)
|
||||
->name('privacy-policy');
|
||||
Route::get('/early-access/release-notes', \App\Http\ReleaseNotesController::class)
|
||||
->name('release-notes');
|
||||
|
||||
collect([
|
||||
Redirection::named('github', '/github', 'https://github.com/nicoverbruggen/phpmon'),
|
||||
|
||||
600
composer.lock
generated
600
composer.lock
generated
File diff suppressed because it is too large
Load Diff
11
package-lock.json
generated
11
package-lock.json
generated
@@ -1034,6 +1034,7 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"caniuse-lite": "^1.0.30001718",
|
||||
"electron-to-chromium": "^1.5.160",
|
||||
@@ -1548,9 +1549,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "10.4.5",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
||||
"version": "10.5.0",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
|
||||
"integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@@ -2057,6 +2058,7 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.11",
|
||||
"picocolors": "^1.1.1",
|
||||
@@ -2619,6 +2621,7 @@
|
||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@@ -2690,6 +2693,7 @@
|
||||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.4.4",
|
||||
@@ -2791,6 +2795,7 @@
|
||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
|
||||
83
resources/markdown/privacy_policy.md
Normal file
83
resources/markdown/privacy_policy.md
Normal file
@@ -0,0 +1,83 @@
|
||||
## Introduction
|
||||
|
||||
PHP Monitor collects some user data required to keep the app functional (for internal checks), but does NOT transmit that information.
|
||||
|
||||
The developer feels very strongly about not collecting any personal user data (PII). However, broadcasting some data cannot be avoided for certain features.
|
||||
|
||||
You can learn more about that here. The developer of PHP Monitor does provide an API (endpoint) that the app connects to, in order to check for updates, if you choose not to disable this optional feature.
|
||||
|
||||
## Analytics
|
||||
|
||||
Any information about number of unique users is derived via the legitimate data available via the update check endpoint and crash reports, which informs me how the app needs to be scaled, and which bugs need to be fixed, if necessary.
|
||||
|
||||
PHP Monitor DOES NOT broadcast data about individual feature usage or any such.
|
||||
|
||||
Some internal "usage" counts are kept, for example to determine whether after some use the sponsorship message can be displayed. This data is collected, but NOT broadcast, so it remains private to you.
|
||||
|
||||
## Crash reports
|
||||
|
||||
Crash reports can be sent via the API the developer has built for PHP Monitor. When the app has crashed, the user has the option to send the crash report.
|
||||
|
||||
### Sending the crash report
|
||||
|
||||
Sending the crash report does not happen automatically, the user has to consent to sending this information to the developer.
|
||||
|
||||
These crash reports are used to identify issues in the app that I (the developer) can then identify, reproduce and fix.
|
||||
|
||||
### What's in a crash report
|
||||
|
||||
The information included in a de-symbolicated crash report is:
|
||||
|
||||
- A unique crash identifier
|
||||
- What version of macOS you were running
|
||||
- What version of PHP Monitor you were running
|
||||
- Where PHP Monitor was located on your system (usually `/Applications`)
|
||||
- What hardware you were using
|
||||
- What kind of architecture your computer uses (ARM or Intel)
|
||||
- When the crash occurred
|
||||
- What type of exception occurred
|
||||
- A list of threads, including the crashed one
|
||||
- Additional address range information for binaries
|
||||
|
||||
No personal information like email address, username, computer name or anything that could personally identify you is collected.
|
||||
|
||||
These crash reports can be inspected prior to sending them by pressing the "help" button when the app offers to share the crash report.
|
||||
|
||||
## Checking for updates
|
||||
|
||||
### Understanding update checks
|
||||
|
||||
When checking for updates (normally every 24 hours), the app will request the latest version of the app by contacting the server. To receive an accurate response, the app broadcasts the following required information:
|
||||
|
||||
- **What version of macOS is currently being used.** This is relevant because I want to prevent clients running on versions of macOS that won’t be supported for future releases to not get a notice about updates.
|
||||
|
||||
- **What version and build of PHP Monitor is currently being used.** This one seems rather obvious, but without knowing what version is currently being used, the app can’t determine if a newer version is available. This bit of info is also relevant to point #1 above.
|
||||
|
||||
### What information is stored?
|
||||
|
||||
For historical and analytics purposes, this information is logged to the database and currently retained indefinitely, although I suspect this will be changed in the future.
|
||||
|
||||
A user's IP address also reaches the API when checking for updates (as a consequence of using the internet), but this information is anonymized when saved to the database.
|
||||
|
||||
This way, the data can still be used to prevent bad actors from doing too many requests to my server, while not impacting the privacy of users, who remain anonymous and cannot be tracked.
|
||||
|
||||
Despite this careful approach, if you do not want the app to send any information from your system, you can always disable the automatic update check.
|
||||
|
||||
For a more detailed insight into how the update check works, you can also read [my detailed technical blog post](https://nicoverbruggen.be/blog/phpmon-2025-and-beyond#content-php-monitor-2509-improved-update-checking), which you may find interesting.
|
||||
|
||||
## Open source, yay!
|
||||
|
||||
### Can I examine the source code myself?
|
||||
|
||||
You can inspect how PHP Monitor does things by inspecting the latest code. PHP Monitor is an open source project available [on GitHub](https://github.com/nicoverbruggen/phpmon).
|
||||
|
||||
### Is the source code of the API available?
|
||||
|
||||
The source code of the API is not (currently) publicly available, but [this website](https://github.com/phpmon/website) is. I am currently considering open sourcing the API, too.
|
||||
|
||||
## On third-party software
|
||||
|
||||
PHP Monitor makes use of the Homebrew installation and Laravel Valet installed on the user's system. The user is responsible for investigating how any third-party software uses analytics.
|
||||
|
||||
- You can learn more about how [Homebrew]((https://docs.brew.sh/Analytics)) collects analytics. I've also included a little bit of information about this in the README.
|
||||
- For certain other update checks (i.e. checking if there are any updates to Laravel Valet), the app may connect to other services, like [Packagist](https://packagist.org/).
|
||||
@@ -1,28 +1,9 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Early Access (Release Notes) – PHP Monitor</title>
|
||||
<meta name="description" content="PHP Monitor: Lightweight, native Mac menu bar app that interacts with Laravel Valet. Helps you manage multiple PHP installations, locate config files and more.">
|
||||
{{-- Web Fonts --}}
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
{{-- Vite --}}
|
||||
@vite('resources/css/app.css')
|
||||
{{-- OG --}}
|
||||
<meta property="og:title" content="PHP Monitor: Lightweight, native Mac menu bar app that interacts with Laravel Valet. Helps you manage multiple PHP installations, locate config files and more.">
|
||||
<meta property="og:image" content="{{ url('/images/phpmon-social.png') }}">
|
||||
{{-- Favicons --}}
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
{{-- Umami --}}
|
||||
<script defer src="https://umami.nicoverbruggen.be/script.js" data-website-id="a94ced9c-2bdd-4a02-9c52-f1b8d34aba89"></script>
|
||||
</head>
|
||||
<body class="font-sans antialiased">
|
||||
@extends('layouts.shared')
|
||||
|
||||
@section('title', 'PHP Monitor EAP')
|
||||
@section('description', 'This page details all recent changes to EAP builds for PHP Monitor.')
|
||||
|
||||
@section('content')
|
||||
<div>
|
||||
<div class="bg-dim flex">
|
||||
<header class="flex flex-col m-auto max-w-xl py-5 md:py-8 lg:py-10 p-4">
|
||||
@@ -110,5 +91,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@endsection
|
||||
|
||||
@@ -1,162 +1,143 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PHP Monitor</title>
|
||||
<meta name="description" content="PHP Monitor: Lightweight, native Mac menu bar app that interacts with Laravel Valet. Helps you manage multiple PHP installations, locate config files and more.">
|
||||
{{-- Web Fonts --}}
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
{{-- Vite --}}
|
||||
@vite('resources/css/app.css')
|
||||
{{-- OG --}}
|
||||
<meta property="og:title" content="PHP Monitor: Lightweight, native Mac menu bar app that interacts with Laravel Valet. Helps you manage multiple PHP installations, locate config files and more.">
|
||||
<meta property="og:image" content="{{ url('/images/phpmon-social.png') }}">
|
||||
{{-- Favicons --}}
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
{{-- Umami --}}
|
||||
<script defer src="https://umami.nicoverbruggen.be/script.js" data-website-id="a94ced9c-2bdd-4a02-9c52-f1b8d34aba89"></script>
|
||||
</head>
|
||||
<body class="font-sans antialiased">
|
||||
<div>
|
||||
<div class="bg-primary p-4 text-center text-white">
|
||||
Support PHP Monitor with a monthly sponsorship of $5 or more on GitHub for early access builds!
|
||||
<a class="underline font-bold" href="/early-access/release-notes" target="_blank">Learn more</a>
|
||||
</div>
|
||||
<div class="bg-dim flex">
|
||||
<header class="flex flex-col m-auto max-w-xl py-5 md:py-8 lg:py-10 p-4">
|
||||
<div>
|
||||
<x-logo size="100"></x-logo>
|
||||
<h1 class="text-5xl font-bold mb-3 text-black">
|
||||
Monitor and manage<br/>your PHP installations<br/> <span class="text-primary">with ease</span>.
|
||||
</h1>
|
||||
<p class="text-2xl leading-9 mt-8 text-black"><b>PHP Monitor</b> is a lightweight, native Mac menu bar app that works best when accompanied by <a href="https://github.com/laravel/valet" class="underline">Laravel Valet</a> (but it also works without it).</p>
|
||||
<div class="flex md:space-x-3 mt-6 flex-col md:flex-row">
|
||||
<a href="{{ url()->route('releases') }}" class="mt-4 text-lg md:text-xl px-4 py-2 bg-green-400 hover:bg-green-500 text-black hover:text-gray-900 rounded-lg shadow-md flex">
|
||||
<svg width="28" height="28" viewBox="0 0 24 24"><path fill="currentColor" d="M13 13v5.585l1.828-1.828l1.415 1.415L12 22.414l-4.243-4.242l1.415-1.415L11 18.585V13h2zM12 2a7.001 7.001 0 0 1 6.954 6.194a5.5 5.5 0 0 1-.953 10.784v-2.014a3.5 3.5 0 1 0-1.112-6.91a5 5 0 1 0-9.777 0a3.5 3.5 0 0 0-1.292 6.88l.18.03v2.014a5.5 5.5 0 0 1-.954-10.784A7 7 0 0 1 12 2z"/></svg>
|
||||
<span class="ml-2">Download</span>
|
||||
</a>
|
||||
<a href="{{ url()->route('github') }}" class="mt-4 text-lg md:text-xl px-3 py-2 bg-white hover:bg-blue-200 text-black rounded-lg shadow-md flex">
|
||||
<svg width="28" height="28" viewBox="0 0 24 24"><path fill="currentColor" d="M13 21v2.5l-3-2l-3 2V21h-.5A3.5 3.5 0 0 1 3 17.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v17a1 1 0 0 1-1 1h-7zm0-2h6v-3H6.5a1.5 1.5 0 0 0 0 3H7v-2h6v2zm6-5V4H6v10.035A3.53 3.53 0 0 1 6.5 14H19zM7 5h2v2H7V5zm0 3h2v2H7V8zm0 3h2v2H7v-2z"/></svg>
|
||||
<span class="ml-2">GitHub</span>
|
||||
</a>
|
||||
<a href="{{ url()->route('sponsor') }}" class="mt-4 text-lg md:text-xl px-3 py-2 bg-white hover:bg-blue-200 text-black rounded-lg shadow-md flex">
|
||||
<svg width="28" height="28" viewBox="0 0 24 24"><path fill="rgb(191, 57, 137)" d="M17.625 1.499c-2.32 0-4.354 1.203-5.625 3.03c-1.271-1.827-3.305-3.03-5.625-3.03C3.129 1.499 0 4.253 0 8.249c0 4.275 3.068 7.847 5.828 10.227a33.14 33.14 0 0 0 5.616 3.876l.028.017l.008.003l-.001.003c.163.085.342.126.521.125c.179.001.358-.041.521-.125l-.001-.003l.008-.003l.028-.017a33.14 33.14 0 0 0 5.616-3.876C20.932 16.096 24 12.524 24 8.249c0-3.996-3.129-6.75-6.375-6.75zm-.919 15.275a30.766 30.766 0 0 1-4.703 3.316l-.004-.002l-.004.002a30.955 30.955 0 0 1-4.703-3.316c-2.677-2.307-5.047-5.298-5.047-8.523c0-2.754 2.121-4.5 4.125-4.5c2.06 0 3.914 1.479 4.544 3.684c.143.495.596.797 1.086.796c.49.001.943-.302 1.085-.796c.63-2.205 2.484-3.684 4.544-3.684c2.004 0 4.125 1.746 4.125 4.5c0 3.225-2.37 6.216-5.048 8.523z"/></svg>
|
||||
<span class="ml-2">Sponsor</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<div class="px-4">
|
||||
<div class="flex flex-col m-auto max-w-3xl py-4 md:py-10">
|
||||
<div class="max-w-3xl m-auto" style="position: relative;">
|
||||
<img src="{{ url('/images/marketing.jpg?v=2025.11') }}" alt="PHP Monitor" class="m-auto max-w-full bg-gray-100 rounded-xl shadow-lg">
|
||||
</div>
|
||||
<div class="max-w-2xl m-auto mt-12">
|
||||
<p class="text-2xl leading-9 mb-6"><b>PHP Monitor</b> helps you set up and develop <span class="text-primary">Laravel</span> and <span class="text-primary">Symfony</span> projects. It's also great for <span class="text-primary">WordPress</span> or <span class="text-primary">Drupal</span> sites. In fact, it's a great companion for all kinds of projects, no matter the framework or CMS.</p>
|
||||
</div>
|
||||
@if (Cache::has('stargazers') && Cache::has('downloads'))
|
||||
<div class="max-w-2xl m-auto mt-6 pb-6 space-y-3 border border-b-gray-200 rounded-lg px-8 py-4 shadow-lg">
|
||||
<p class="uppercase font-bold text-center mt-1 mb-5 flex items-center space-x-2">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg>
|
||||
<span>GitHub Stats</span>
|
||||
</p>
|
||||
<div class="flex md:flex-row flex-col md:space-x-6 md:space-y-0">
|
||||
<p class="text-xl flex items-center space-x-1 mb-4 md:mb-0 text-gray-700">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24"><path fill="#eac54f" d="m5.825 22l1.625-7.025L2 10.25l7.2-.625L12 3l2.8 6.625l7.2.625l-5.45 4.725L18.175 22L12 18.275Z"/></svg>
|
||||
<strong>{{ round(Cache::get('stargazers'), -2) / 1000 }}k</strong>
|
||||
<span>stargazers</span>
|
||||
</p>
|
||||
<p class="text-xl flex items-center space-x-1 text-gray-700">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24"><path fill="currentColor" d="M7 20.981a6.5 6.5 0 0 1-2.936-12a8.001 8.001 0 0 1 15.872 0a6.5 6.5 0 0 1-2.936 12V21H7v-.019zM13 12V8h-2v4H8l4 5l4-5h-3z"/></svg>
|
||||
<strong>
|
||||
{{ round(Cache::get('downloads'), -3) / 1000 }}k
|
||||
</strong>
|
||||
<span>total downloads</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="max-w-2xl m-auto mt-12">
|
||||
<p class="mb-6 text-lg">This app is made with <span class="text-red-500">♥</span> by <a href="https://nicoverbruggen.be" class="text-primary">Nico Verbruggen</a>. It is open source and entirely free to use. Further development of this app is supported by <a class="text-primary" href="https://nicoverbruggen.be/sponsor">your donations</a>. You are also encouraged to <a href="{{ url()->route('github') }}" class="text-primary">star the repository</a> on GitHub.</p>
|
||||
<p class="text-gray-500 leading-6">Your stars and sponsorships are very much appreciated. Thanks to your support, the app has seen a steady stream of updates with new features and bugfixes over the last three years, and will continue to be supported as long as it makes sense to do so.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-dim flex p-5 py-10 my-6">
|
||||
<div class="flex flex-col m-auto max-w-xl space-y-2 py-8">
|
||||
<h2 class="text-3xl mb-3">
|
||||
<span class="inline-block bg-primary px-2 py-1 text-white text-2xl rounded font-bold">
|
||||
PHP Monitor 25.11 is now available!
|
||||
</span>
|
||||
</h2>
|
||||
<div class="text-xl mt-8 leading-8">
|
||||
<p class="mb-4">I am releasing monthly updates with minor improvements and quality of life changes for the foreseeable future to better support the app.</p>
|
||||
<p class="text-base mb-4">You can check out the <a href="https://github.com/nicoverbruggen/phpmon/releases" class="text-primary">latest release notes</a> on GitHub for more details.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-4">
|
||||
<x-feature feature-title="Totally free & open source" y-position="top" x-position="left" class="lg:flex-row-reverse" img-src="/images/oss.png?v=7">
|
||||
PHP Monitor's source code is, unlike other proprietary products, entirely <b>open source</b>. Also, all features that are part of PHP Monitor are available <b>entirely free of charge</b>, so you don't need to pay for any walled-off features. How great is that?
|
||||
</x-feature>
|
||||
<x-feature feature-title="A GUI for managing PHP versions" img-src="/images/version-manager.jpg?v=2025.11" y-position="top">
|
||||
With the PHP Version Manager, you can easily <b>install, upgrade and remove</b> individual PHP versions without needing to manually type or copy Homebrew commands. The app will also attempt to <b>automatically fix</b> broken PHP versions.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Information at a glance" img-src="/images/menu-bar.jpg?v=2025.11" y-position="top" class="lg:flex-row-reverse">
|
||||
PHP Monitor lives in your menu bar. From here, you can use the bulk of PHP Monitor's functionality, including the <b>global version switcher</b> as well as <b>services status</b> section.<br/><br/>If everything runs fine it'll be obvious, but if things happen to go wrong PHP Monitor will warn you, and help you figure out what to do.
|
||||
</x-feature>
|
||||
<x-feature feature-title="No more hunting for config files" img-src="/images/config.jpg?v=2025.11" y-position="top">
|
||||
Sometimes you need to edit a <b>configuration file</b> or <b>toggle an extension</b>. But where are those pesky config files located again? From PHP Monitor's menu you can easily find them. Extensions can even be toggled with one click of the button!
|
||||
</x-feature>
|
||||
<x-feature feature-title="All of your domains in a single list" img-src="/images/domains.jpg?v=2025.11" y-position="top" class="lg:flex-row-reverse">
|
||||
Do you have many projects or legacy sites? No worries, the app includes a <b>domain list</b> that you can use to get a quick overview of all domains and proxies you have set up, as well as their PHP version, what type of project they are, and more.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Quickly link a new domain or proxy" img-src="/images/link-folder.jpg?v=2025.11" y-position="top">
|
||||
You can easily <b>link or proxy</b> a folder: you can even easily customize the name of the domain and secure this new domain by simply checking a box. This will make these projects accessible as *.test domains on your system.
|
||||
</x-feature>
|
||||
<x-feature feature-title="A different PHP version per domain" img-src="/images/isolation.jpg?v=2025.11" y-position="bottom" class="lg:flex-row-reverse">
|
||||
In addition to offering a global version switcher (which switches the PHP version for all of your projects), this app also includes support for Valet's <b>site isolation</b> feature. This allows you to use a specific version of PHP with a specific domain, all while retaining the globally linked PHP version.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Determine compatibility" img-src="/images/phpinfo.jpg?v=2025.11">
|
||||
PHP Monitor will help you figure out if your sites are <b>compatible</b> with the <b>currently linked version of PHP</b>. You will receive suggestions when <b>site isolation</b> may be of use for a given domain.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Easily manage PHP extensions" img-src="/images/extensions.jpg?v=2025.11" class="lg:flex-row-reverse" y-position="top">
|
||||
With the new PHP Extension Manager, you can easily <b>install and remove</b> PHP extensions, all <b>using a GUI</b>. It is also super easy to manage your extensions on a per PHP version basis via the Domains window (you can right-click on a site and toggle extensions easily).
|
||||
</x-feature>
|
||||
<x-feature feature-title="Small, frequent, fast and easy updates" img-src="/images/updater.jpg?v=2025.11" y-position="bottom">
|
||||
The app also comes with an optional (but very fast) <b>built-in updater</b>, which allows you to stay up-to-date with the latest developments and bug fixes, so you can have a seamless PHP switching experience.
|
||||
</x-feature>
|
||||
<div class="flex lg:flex-row flex-col m-auto max-w-5xl py-4 md:py-8 gap-x-10">
|
||||
<x-single-feature feature-title="A tiny footprint">
|
||||
Laravel Valet is a lightweight solution that is much leaner than Docker, and PHP Monitor as a companion tool uses equally few system resources. It is light on RAM and its CPU usage is negligible.
|
||||
</x-single-feature>
|
||||
<x-single-feature feature-title="Privacy conscious">
|
||||
No tracking. No bullshit. Nothing to worry about. The only outbound connection PHP Monitor makes is a check to see if a newer version is available, and you can disable it.
|
||||
</x-single-feature>
|
||||
<x-single-feature feature-title="No nagging for donations">
|
||||
PHP Monitor will only ask you to donate <em>once</em>, after installing it on a new computer. If you can afford it, donations are very welcome!
|
||||
</x-single-feature>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="bg-blue-50 flex p-5 mt-6">
|
||||
<div class="flex flex-col m-auto max-w-xl space-y-2">
|
||||
<p class="text-sm">I hope you enjoy using the app. I hope you find it makes your day-to-day life a little more productive, enjoyable and most importantly... less stressful. Have a great day!</p>
|
||||
<p class="text-xs pt-2">
|
||||
© {{ date("Y") }}, Nico Verbruggen. All rights reserved.
|
||||
<div class="hidden">
|
||||
| <a rel="me" href="https://nicoverbruggen.be">Website</a>
|
||||
| <a rel="me" href="https://phpc.social/@nicoverbruggen">Mastodon</a>
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
@extends('layouts.shared')
|
||||
|
||||
@section('title', 'PHP Monitor')
|
||||
@section('description', 'PHP Monitor: Lightweight, native Mac menu bar app that interacts with Laravel Valet. Helps you manage multiple PHP installations, locate config files and more.')
|
||||
|
||||
@section('content')
|
||||
<div class="bg-primary p-4 text-center text-white">
|
||||
Support PHP Monitor with a monthly sponsorship of $5 or more on GitHub for early access builds!
|
||||
<a class="underline font-bold" href="/early-access/release-notes" target="_blank">Learn more</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<div class="bg-dim flex">
|
||||
<header class="flex flex-col m-auto max-w-xl py-5 md:py-8 lg:py-10 p-4">
|
||||
<div>
|
||||
<x-logo size="100"></x-logo>
|
||||
<h1 class="text-5xl font-bold mb-3 text-black">
|
||||
Monitor and manage<br/>your PHP installations<br/> <span class="text-primary">with ease</span>.
|
||||
</h1>
|
||||
<p class="text-2xl leading-9 mt-8 text-black"><b>PHP Monitor</b> is a lightweight, native Mac menu bar app that works best when accompanied by <a href="https://github.com/laravel/valet" class="underline">Laravel Valet</a> (but it also works without it).</p>
|
||||
<div class="flex md:space-x-3 mt-6 flex-col md:flex-row">
|
||||
<a href="{{ url()->route('releases') }}" class="mt-4 text-lg md:text-xl px-4 py-2 bg-green-400 hover:bg-green-500 text-black hover:text-gray-900 rounded-lg shadow-md flex">
|
||||
<svg width="28" height="28" viewBox="0 0 24 24"><path fill="currentColor" d="M13 13v5.585l1.828-1.828l1.415 1.415L12 22.414l-4.243-4.242l1.415-1.415L11 18.585V13h2zM12 2a7.001 7.001 0 0 1 6.954 6.194a5.5 5.5 0 0 1-.953 10.784v-2.014a3.5 3.5 0 1 0-1.112-6.91a5 5 0 1 0-9.777 0a3.5 3.5 0 0 0-1.292 6.88l.18.03v2.014a5.5 5.5 0 0 1-.954-10.784A7 7 0 0 1 12 2z"/></svg>
|
||||
<span class="ml-2">Download</span>
|
||||
</a>
|
||||
<a href="{{ url()->route('github') }}" class="mt-4 text-lg md:text-xl px-3 py-2 bg-white hover:bg-blue-200 text-black rounded-lg shadow-md flex">
|
||||
<svg width="28" height="28" viewBox="0 0 24 24"><path fill="currentColor" d="M13 21v2.5l-3-2l-3 2V21h-.5A3.5 3.5 0 0 1 3 17.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v17a1 1 0 0 1-1 1h-7zm0-2h6v-3H6.5a1.5 1.5 0 0 0 0 3H7v-2h6v2zm6-5V4H6v10.035A3.53 3.53 0 0 1 6.5 14H19zM7 5h2v2H7V5zm0 3h2v2H7V8zm0 3h2v2H7v-2z"/></svg>
|
||||
<span class="ml-2">GitHub</span>
|
||||
</a>
|
||||
<a href="{{ url()->route('sponsor') }}" class="mt-4 text-lg md:text-xl px-3 py-2 bg-white hover:bg-blue-200 text-black rounded-lg shadow-md flex">
|
||||
<svg width="28" height="28" viewBox="0 0 24 24"><path fill="rgb(191, 57, 137)" d="M17.625 1.499c-2.32 0-4.354 1.203-5.625 3.03c-1.271-1.827-3.305-3.03-5.625-3.03C3.129 1.499 0 4.253 0 8.249c0 4.275 3.068 7.847 5.828 10.227a33.14 33.14 0 0 0 5.616 3.876l.028.017l.008.003l-.001.003c.163.085.342.126.521.125c.179.001.358-.041.521-.125l-.001-.003l.008-.003l.028-.017a33.14 33.14 0 0 0 5.616-3.876C20.932 16.096 24 12.524 24 8.249c0-3.996-3.129-6.75-6.375-6.75zm-.919 15.275a30.766 30.766 0 0 1-4.703 3.316l-.004-.002l-.004.002a30.955 30.955 0 0 1-4.703-3.316c-2.677-2.307-5.047-5.298-5.047-8.523c0-2.754 2.121-4.5 4.125-4.5c2.06 0 3.914 1.479 4.544 3.684c.143.495.596.797 1.086.796c.49.001.943-.302 1.085-.796c.63-2.205 2.484-3.684 4.544-3.684c2.004 0 4.125 1.746 4.125 4.5c0 3.225-2.37 6.216-5.048 8.523z"/></svg>
|
||||
<span class="ml-2">Sponsor</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<div class="px-4">
|
||||
<div class="flex flex-col m-auto max-w-3xl py-4 md:py-10">
|
||||
<div class="max-w-3xl m-auto" style="position: relative;">
|
||||
<img src="{{ url('/images/marketing.jpg?v=2025.11') }}" alt="PHP Monitor" class="m-auto max-w-full bg-gray-100 rounded-xl shadow-lg">
|
||||
</div>
|
||||
<div class="max-w-2xl m-auto mt-12">
|
||||
<p class="text-2xl leading-9 mb-6"><b>PHP Monitor</b> helps you set up and develop <span class="text-primary">Laravel</span> and <span class="text-primary">Symfony</span> projects. It's also great for <span class="text-primary">WordPress</span> or <span class="text-primary">Drupal</span> sites. In fact, it's a great companion for all kinds of projects, no matter the framework or CMS.</p>
|
||||
</div>
|
||||
@if (Cache::has('stargazers') && Cache::has('downloads'))
|
||||
<div class="max-w-2xl m-auto mt-6 pb-6 space-y-3 border border-b-gray-200 rounded-lg px-8 py-4 shadow-lg">
|
||||
<p class="uppercase font-bold text-center mt-1 mb-5 flex items-center space-x-2">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg>
|
||||
<span>GitHub Stats</span>
|
||||
</p>
|
||||
<div class="flex md:flex-row flex-col md:space-x-6 md:space-y-0">
|
||||
<p class="text-xl flex items-center space-x-1 mb-4 md:mb-0 text-gray-700">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24"><path fill="#eac54f" d="m5.825 22l1.625-7.025L2 10.25l7.2-.625L12 3l2.8 6.625l7.2.625l-5.45 4.725L18.175 22L12 18.275Z"/></svg>
|
||||
<strong>{{ round(Cache::get('stargazers'), -2) / 1000 }}k</strong>
|
||||
<span>stargazers</span>
|
||||
</p>
|
||||
<p class="text-xl flex items-center space-x-1 text-gray-700">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24"><path fill="currentColor" d="M7 20.981a6.5 6.5 0 0 1-2.936-12a8.001 8.001 0 0 1 15.872 0a6.5 6.5 0 0 1-2.936 12V21H7v-.019zM13 12V8h-2v4H8l4 5l4-5h-3z"/></svg>
|
||||
<strong>
|
||||
{{ round(Cache::get('downloads'), -3) / 1000 }}k
|
||||
</strong>
|
||||
<span>total downloads</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="max-w-2xl m-auto mt-12">
|
||||
<p class="mb-6 text-lg">This app is made with <span class="text-red-500">♥</span> by <a href="https://nicoverbruggen.be" class="text-primary">Nico Verbruggen</a>. It is open source and entirely free to use. Further development of this app is supported by <a class="text-primary" href="https://nicoverbruggen.be/sponsor">your donations</a>. You are also encouraged to <a href="{{ url()->route('github') }}" class="text-primary">star the repository</a> on GitHub.</p>
|
||||
<p class="text-gray-500 leading-6">Your stars and sponsorships are very much appreciated. Thanks to your support, the app has seen a steady stream of updates with new features and bugfixes over the last three years, and will continue to be supported as long as it makes sense to do so.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-dim flex p-5 py-10 my-6">
|
||||
<div class="flex flex-col m-auto max-w-xl space-y-2 py-8">
|
||||
<h2 class="text-3xl mb-3">
|
||||
<span class="inline-block bg-primary px-2 py-1 text-white text-2xl rounded font-bold">
|
||||
PHP Monitor 25.11 is now available!
|
||||
</span>
|
||||
</h2>
|
||||
<div class="text-xl mt-8 leading-8">
|
||||
<p class="mb-4">I am releasing monthly updates with minor improvements and quality of life changes for the foreseeable future to better support the app.</p>
|
||||
<p class="text-base mb-4">You can check out the <a href="https://github.com/nicoverbruggen/phpmon/releases" class="text-primary">latest release notes</a> on GitHub for more details.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-4">
|
||||
<x-feature feature-title="Totally free & open source" y-position="top" x-position="left" class="lg:flex-row-reverse" img-src="/images/oss.png?v=7">
|
||||
PHP Monitor's source code is, unlike other proprietary products, entirely <b>open source</b>. Also, all features that are part of PHP Monitor are available <b>entirely free of charge</b>, so you don't need to pay for any walled-off features. How great is that?
|
||||
</x-feature>
|
||||
<x-feature feature-title="A GUI for managing PHP versions" img-src="/images/version-manager.jpg?v=2025.11" y-position="top">
|
||||
With the PHP Version Manager, you can easily <b>install, upgrade and remove</b> individual PHP versions without needing to manually type or copy Homebrew commands. The app will also attempt to <b>automatically fix</b> broken PHP versions.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Information at a glance" img-src="/images/menu-bar.jpg?v=2025.11" y-position="top" class="lg:flex-row-reverse">
|
||||
PHP Monitor lives in your menu bar. From here, you can use the bulk of PHP Monitor's functionality, including the <b>global version switcher</b> as well as <b>services status</b> section.<br/><br/>If everything runs fine it'll be obvious, but if things happen to go wrong PHP Monitor will warn you, and help you figure out what to do.
|
||||
</x-feature>
|
||||
<x-feature feature-title="No more hunting for config files" img-src="/images/config.jpg?v=2025.11" y-position="top">
|
||||
Sometimes you need to edit a <b>configuration file</b> or <b>toggle an extension</b>. But where are those pesky config files located again? From PHP Monitor's menu you can easily find them. Extensions can even be toggled with one click of the button!
|
||||
</x-feature>
|
||||
<x-feature feature-title="All of your domains in a single list" img-src="/images/domains.jpg?v=2025.11" y-position="top" class="lg:flex-row-reverse">
|
||||
Do you have many projects or legacy sites? No worries, the app includes a <b>domain list</b> that you can use to get a quick overview of all domains and proxies you have set up, as well as their PHP version, what type of project they are, and more.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Quickly link a new domain or proxy" img-src="/images/link-folder.jpg?v=2025.11" y-position="top">
|
||||
You can easily <b>link or proxy</b> a folder: you can even easily customize the name of the domain and secure this new domain by simply checking a box. This will make these projects accessible as *.test domains on your system.
|
||||
</x-feature>
|
||||
<x-feature feature-title="A different PHP version per domain" img-src="/images/isolation.jpg?v=2025.11" y-position="bottom" class="lg:flex-row-reverse">
|
||||
In addition to offering a global version switcher (which switches the PHP version for all of your projects), this app also includes support for Valet's <b>site isolation</b> feature. This allows you to use a specific version of PHP with a specific domain, all while retaining the globally linked PHP version.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Determine compatibility" img-src="/images/phpinfo.jpg?v=2025.11">
|
||||
PHP Monitor will help you figure out if your sites are <b>compatible</b> with the <b>currently linked version of PHP</b>. You will receive suggestions when <b>site isolation</b> may be of use for a given domain.
|
||||
</x-feature>
|
||||
<x-feature feature-title="Easily manage PHP extensions" img-src="/images/extensions.jpg?v=2025.11" class="lg:flex-row-reverse" y-position="top">
|
||||
With the new PHP Extension Manager, you can easily <b>install and remove</b> PHP extensions, all <b>using a GUI</b>. It is also super easy to manage your extensions on a per PHP version basis via the Domains window (you can right-click on a site and toggle extensions easily).
|
||||
</x-feature>
|
||||
<x-feature feature-title="Small, frequent, fast and easy updates" img-src="/images/updater.jpg?v=2025.11" y-position="bottom">
|
||||
The app also comes with an optional (but very fast) <b>built-in updater</b>, which allows you to stay up-to-date with the latest developments and bug fixes, so you can have a seamless PHP switching experience.
|
||||
</x-feature>
|
||||
<div class="flex lg:flex-row flex-col m-auto max-w-5xl py-4 md:py-8 gap-x-10">
|
||||
<x-single-feature feature-title="A tiny footprint">
|
||||
Laravel Valet is a lightweight solution that is much leaner than Docker. PHP Monitor as a companion tool uses few system resources: it is light on RAM, and CPU usage is negligible.
|
||||
</x-single-feature>
|
||||
<x-single-feature feature-title="Privacy conscious">
|
||||
No tracking. No bullshit. Nothing to worry about. What does that mean? Well, learn more about how your data is respected by reading the
|
||||
<a class="underline" href="{{ route('privacy-policy') }}">privacy policy</a>. In plain English!
|
||||
</x-single-feature>
|
||||
<x-single-feature feature-title="No nagging for donations">
|
||||
PHP Monitor will only ask you to donate <em>once</em>, after installing it on a new computer. If you can afford it, donations are very welcome!
|
||||
</x-single-feature>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="bg-blue-50 flex p-5 mt-6">
|
||||
<div class="flex flex-col m-auto max-w-xl space-y-2">
|
||||
<p class="text-sm">I hope you enjoy using the app. I hope you find it makes your day-to-day life a little more productive, enjoyable and most importantly... less stressful. Have a great day!</p>
|
||||
<p class="text-xs pt-2">
|
||||
© {{ date("Y") }}, Nico Verbruggen. All rights reserved.
|
||||
</p>
|
||||
<p class="text-xs pt-2">
|
||||
<a class="underline" href="{{ route('privacy-policy') }}">Privacy Policy</a>
|
||||
| <a class="underline" href="{{ route('release-notes') }}">Release Notes</a>
|
||||
| <a class="underline" rel="me" href="https://nicoverbruggen.be">Website</a>
|
||||
| <a class="underline" rel="me" href="https://phpc.social/@nicoverbruggen">Mastodon</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
@endsection
|
||||
|
||||
29
resources/views/layouts/shared.blade.php
Normal file
29
resources/views/layouts/shared.blade.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>@yield('title')</title>
|
||||
<meta name="description" content="@yield('description')">
|
||||
{{-- Web Fonts --}}
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
{{-- Vite --}}
|
||||
@vite('resources/css/app.css')
|
||||
{{-- OG --}}
|
||||
<meta property="og:title" content="@yield('title')">
|
||||
<meta property="og:description" content="@yield('description')">
|
||||
<meta property="og:image" content="{{ url('/images/phpmon-social.png') }}">
|
||||
{{-- Favicons --}}
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
{{-- Umami --}}
|
||||
<script defer src="https://umami.nicoverbruggen.be/script.js" data-website-id="a94ced9c-2bdd-4a02-9c52-f1b8d34aba89"></script>
|
||||
</head>
|
||||
<body class="font-sans antialiased">
|
||||
@yield('content')
|
||||
</body>
|
||||
</html>
|
||||
52
resources/views/privacy-policy.blade.php
Normal file
52
resources/views/privacy-policy.blade.php
Normal file
@@ -0,0 +1,52 @@
|
||||
@extends('layouts.shared')
|
||||
|
||||
@section('title', 'Privacy Policy')
|
||||
@section('description', 'Document detailing privacy policy for PHP Monitor.')
|
||||
|
||||
@section('content')
|
||||
<div>
|
||||
<div class="bg-dim flex">
|
||||
<header class="flex flex-col m-auto max-w-xl py-5 md:py-8 lg:py-10 p-4">
|
||||
<div class="flex">
|
||||
<x-logo size="95"></x-logo>
|
||||
<h1 class="text-xl font-bold mb-2 text-white mt-3">
|
||||
<span class="text-black text-3xl">PHP Monitor</span><br/>
|
||||
<span class="text-primary text-3xl">Privacy Policy</span>
|
||||
</h1>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<div class="p-4 m-auto max-w-3xl mb-8">
|
||||
<style>
|
||||
h2 {
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
margin: 30px 0;
|
||||
border-bottom: 3px solid #BBB;
|
||||
}
|
||||
h3 {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
margin: 40px 20px 0 0;
|
||||
border-bottom: 3px solid #EEE;
|
||||
}
|
||||
hr {
|
||||
margin: 20px 0;
|
||||
}
|
||||
a {
|
||||
color: #4894FC;
|
||||
}
|
||||
p {
|
||||
margin: 20px 0;
|
||||
}
|
||||
ul li {
|
||||
list-style: disc;
|
||||
margin-left: 22px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
</style>
|
||||
<p class="text-center">This document was last updated on: {{ $lastUpdated }}.</p>
|
||||
{!! $content !!}
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
17
tests/Feature/PrivacyPolicyReachabilityTest.php
Normal file
17
tests/Feature/PrivacyPolicyReachabilityTest.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use Tests\TestCase;
|
||||
|
||||
class PrivacyPolicyReachabilityTest extends TestCase
|
||||
{
|
||||
public function test_privacy_policy_is_reachable()
|
||||
{
|
||||
$response = $this->get('/privacy-policy');
|
||||
|
||||
$response->assertStatus(200);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user