Fade is a Laravel 12 project focused on secure, ephemeral note sharing. It allows users to create encrypted notes that self-destruct after a specified time or view limit. The system is performant, queue-aware, and ideal for scenarios requiring secure, temporary data sharing (e.g., sharing credentials, confidential snippets, or sensitive tokens).
Notes are encrypted with AES-256-CBC using Laravel’s Crypt facade (OpenSSL under the hood), ensuring that contents are never stored in plaintext. Every note can be accessed only through a unique URL and can be configured to expire based on time or view count.
Key Technologies used:
- PHP
- Laravel 12
- MySQL
- Nginx
- Redis as queue driver for jobs
- Docker + Docker Compose
- PestPHP
- OpenSSL encryption via Laravel's Crypt facade
Important
You must have Docker and Docker Compose installed on your machine.
- Clone the repository:
git clone https://github.com/benjamimWalker/fade.git
- Go to the project folder:
cd fade
- Prepare environment files:
cp .env.example .env
- Build the containers:
docker compose up -d
- Install composer dependencies:
docker compose exec app composer install
- Run the migrations:
docker compose exec app php artisan migrate
- You can now execute the tests:
docker compose exec app php artisan test
- And access the documentation at:
http://localhost/docs/api
Send a POST
request to /api/notes
with a body and optional ttl or view_limit (Can also be done in the try of the docs):
-
Decrypt the note using AES-256-CBC
-
Decrement the view limit (if set)
-
Delete the note if it expired or view limit is exhausted
The main features of the application are:
- AES-256-CBC encryption, Redis queue driver, and smart rate limits.
- Background job processing for deleting expired notes.
- Notes can expire after a TTL or after being viewed n times.
- Full test coverage with PestPHP.
- API documentation
- Clean, maintainable Laravel 12 code with proper architecture.
[Benjamim] - [[email protected]]
Github: @benjamimWalker