+
+> [!WARNING]
+> The default `3.x` branch is an alpha preview. It is ready for testing and
+> feedback, but not for production data. Use the supported
+> [`2.x` release](https://github.com/InvoiceShelf/InvoiceShelf/tree/2.x) for a
+> production installation.
+
+
+
+## Run your invoicing from one place
+
+InvoiceShelf is a self-hosted web application for creating invoices, tracking
+payments and expenses, and keeping customer accounts organised. It is built for
+freelancers and small businesses that want a focused workflow without giving up
+control of their data.
+
+- Create invoices and estimates, then export polished PDFs.
+- Record payments and see what each customer still owes.
+- Track expenses, taxes, and business reports.
+- Schedule recurring invoices for repeat work.
+- Give customers a portal for invoices, estimates, and payment history.
+- Manage multiple companies and invite team members with scoped roles.
+
+Optional official modules can add specialised features without making the core
+application heavier.
+
+## Install InvoiceShelf
+
+### Production: InvoiceShelf 2.x
+
+Install the current stable release from the
+[self-hosted download page](https://invoiceshelf.com/download), or run the
+official Docker image with the `:latest` tag. Follow the
+[installation guide](https://docs.invoiceshelf.com/installation.html) for the
+complete setup and upgrade instructions.
+
+### Preview: InvoiceShelf 3.x
+
+Use the preview only with disposable or backed-up data:
+
+- Download the latest 3.x preview from the
+ [self-hosted download page](https://invoiceshelf.com/download).
+- For Docker, use `invoiceshelf/invoiceshelf:next` instead of `:latest` in the
+ [official Compose setup](https://github.com/InvoiceShelf/docker).
+
+A minimal SQLite Docker setup looks like this:
+
+```bash
+git clone https://github.com/InvoiceShelf/docker.git invoiceshelf
+cd invoiceshelf
+cp docker-compose.sqlite.yml docker-compose.yml
+# For the 3.x preview, change the image tag in docker-compose.yml to :next.
+docker compose up -d
+```
+
+Open and finish the setup wizard. Read the
+[Docker guide](https://docs.invoiceshelf.com/install/docker.html) before using
+InvoiceShelf on a public server.
+
+For a traditional web-server installation, see the
+[manual installation guide](https://docs.invoiceshelf.com/install/manual.html).
+InvoiceShelf 3.x requires PHP 8.4 and supports MySQL/MariaDB, PostgreSQL, and
+SQLite. Docker includes the required application runtime.
+
+## Learn and get help
+
+- [User and installation documentation](https://docs.invoiceshelf.com/)
+- [API reference](https://api-docs.invoiceshelf.com/)
+- [Discord community](https://discord.gg/eHXf4zWhsR)
+- [Bug reports and feature requests](https://github.com/InvoiceShelf/InvoiceShelf/issues)
+
+## Contribute
+
+Code contributions are welcome. Start with the
+[contribution guide](CONTRIBUTING.md) and use the development environment in
+[`docker/development`](docker/development/README.md).
+
+You can also help translate InvoiceShelf on
+[Crowdin](https://crowdin.com/project/invoiceshelf).
+
+## License
+
+InvoiceShelf is released under the
+[GNU Affero General Public License v3.0](LICENSE).
diff --git a/config/installer.php b/config/installer.php
index cf584139..14ba7fe7 100755
--- a/config/installer.php
+++ b/config/installer.php
@@ -13,7 +13,7 @@ return [
|
*/
'core' => [
- 'minPhpVersion' => '8.2.0',
+ 'minPhpVersion' => '8.4.0',
],
'final' => [
'key' => true,
diff --git a/docker/development/README.md b/docker/development/README.md
index 9c9cde64..e634d90a 100644
--- a/docker/development/README.md
+++ b/docker/development/README.md
@@ -1,166 +1,86 @@
-# InvoiceShelf Development Environment
+# InvoiceShelf development environment
-This is dockerized development environment that allows developers to easily get started to develop InvoiceShelf.
+The repository includes a Docker Compose development stack for Linux and macOS.
+It provides PHP 8.4, nginx, your chosen database, Adminer, and Mailpit. An
+optional Gotenberg service is available for PDF development.
-This development environment is **NOT MEANT TO BE USED IN PRODUCTION** and is preconfigured with all the needed tools that InvoiceShelf requires for development purposes. It works on Windows, Linux and MacOS.
+> This stack is for development only. For a production installation, use the
+> [official Docker repository](https://github.com/InvoiceShelf/docker).
-For production grade docker image, please refer to [InvoiceShelf/docker](https://github.com/InvoiceShelf/docker) and [InvoiceShelf on DockerHub](https://hub.docker.com/r/invoiceshelf/invoiceshelf).
+## Start the stack
-## How to set up
+You need Git, Docker, and Docker Compose. Clone your fork, prepare the local
+environment file, and run the interactive helper from the repository root:
-### 1. Hosts configuration
-
-We use `invoiceshelf.test` domain for local development within this environment and you need to adhere to it.
-
-For that purpose you need to edit your OS hosts file or DNS server and add the following line to make the local domain name available on your system.
-
-```
-127.0.0.1 invoiceshelf.test
+```bash
+git clone git@github.com:YOUR-USERNAME/InvoiceShelf.git
+cd InvoiceShelf
+cp .env.example .env
+./devenv
```
-#### 1.1. Windows
+The helper:
-The hosts file on Windows is located at `C:\Windows\system32\drivers\etc\hosts`.
+1. checks Docker and Docker Compose;
+2. adds `invoiceshelf.test` to `/etc/hosts` when needed;
+3. asks you to choose MySQL/MariaDB, PostgreSQL, or SQLite;
+4. optionally enables the Gotenberg PDF service; and
+5. saves that choice in `.devenvconfig` for later commands.
-You need to launch Notepad as administrator, open the file through **File > Open**, add the line from above and save the file.
+On the first run, install the PHP dependencies inside the running container:
-#### 1.2. Linux/MacOS
-
-The hosts file on Linux and Mac is located at `/etc/hosts`.
-
-You need to open the file using your favorite editor as sudo/root, add the line from above and save the file.
-
-### 2. FileSystem configuration (Linux)
-
-If you are using **Linux**, you need to make sure that **USRID** and **GRPID** environment variables are set and matching your current session user ids. Those two variables are required to set up the filesystem permissions correctly on Linux.
-
-You can run it one time, every time before starting as follows:
-
-```
-export USRID=$(id -u) && export GRPID=$(id -g)
+```bash
+./devenv run composer install
+./devenv run php artisan key:generate
```
-or you can append this to your .zshrc/.bashrc by running this command in your terminal:
+The frontend runs on the host with Node.js 24 and the pnpm version pinned in
+`package.json`:
-```
-grep -qxF 'export USRID=$(id -u) GRPID=$(id -g)' ~/.${SHELL##*/}rc || echo 'export USRID=$(id -u) GRPID=$(id -g)' >> ~/.${SHELL##*/}rc
-```
-this will append the `export` line to your rc file and run it on each terminal session.
-
-### 3. Clone the project
-
-Clone the InvoiceShelf project directly from InvoiceShelf git or your forked repository:
-
-```bash
-git clone git@github.com:InvoiceShelf/InvoiceShelf.git
+```bash
+corepack enable
+pnpm install --frozen-lockfile
+pnpm dev
```
-## Development Workflow
+Keep `pnpm dev` running while you work. Open and
+complete the installation wizard. For
+MySQL or PostgreSQL, use `db` as the database host and `invoiceshelf` as the
+database name, username, and password. For SQLite, keep the wizard's default
+`storage/app/database.sqlite` path.
-We bundled separate docker-compose.yml file for each database: MySQL, PostgresSQL and SQLite, you can use any of those to spin up your development environment.
+## Everyday commands
-| Database | Compose File |
-|---------|---------------------------|
-| SQLite3 | docker-compose.sqlite.yml |
-| MariaDB | docker-compose.mysql.yml |
-| PostgresSQL | dpcler-compose.pgsql.yml |
-
-### 1. Spinning Up
-
-To **spin up** the environment, run docker compose as follows:
-
-**Important**: If you are on **Linux** and didn't add the `export` line to your .zshrc/.bashrc file, you need to repeat `step 2` before spinning up, otherwise you will face permissions issues.
-
-```
-docker compose -f docker/development/docker-compose.mysql.yml up --build
+```bash
+./devenv start # Start the saved stack
+./devenv stop # Stop it
+./devenv logs # Follow service logs
+./devenv shell # Open a shell in the PHP container
+./devenv run php artisan about
+./devenv test # Run Pest
+./devenv format # Run Pint
+./devenv rebuild # Rebuild images from scratch
```
-### 2. Spinning Down
+`./devenv destroy` removes the stack, its images, and its database volumes. The
+command asks for confirmation before deleting anything.
-To **spin down** the environment, run docker compose as follows:
+## Services
-```
-docker compose -f docker/development/docker-compose.mysql.yml down
-```
+| Service | Address |
+| --- | --- |
+| InvoiceShelf | |
+| Adminer | |
+| Mailpit | |
-### 3. Working with binaries
+Mailpit receives development email over SMTP at `mail:1025`. Adminer connects
+to MySQL or PostgreSQL at host `db`; its database, username, and password are
+all `invoiceshelf`.
-To correctly run `composer`, `npm`, `artisan`, `pint`, `pest` or other binaries within this project, you must ssh into the container as follows:
+## Advanced Compose usage
-```
-docker exec -it invoiceshelf-dev-php /bin/sh
-```
-
-In the `/var/www/html` directory you can find the application root and run the commands from there.
-
-## What is included
-
-### 1. Web Server
-
-This dockerized environment uses PHP-FPM and NGINX together to serve the website `invoiceshelf.test`
-
-Both NGINX and PHP-FPM are configured with optimal settings for development. Please don't use this in production.
-
-**URL**: http://invoiceshelf.test/
-
-### 2. Databases
-
-This dockerized environment comes with support for all three databases that InvoiceShelf suppots: MySQL, PostgreSQL and SQLite.
-
-The setup parameters/credentials for each of the supported databases are as follows.
-
-| | MySQL | PostgreSQL | SQLite |
-|---|---|---|-------------------------------------------|
-| **DB_USER** | invoiceshelf | invoiceshelf | Not applicable |
-| **DB_PASS** | invoiceshelf | invoiceshelf | Not applicable |
-| **DB_NAME** | invoiceshelf | invoiceshelf | /var/www/html/storage/app/database.sqlite |
-| **DB_HOST** | 172.18.0.1 | 172.18.0.1 | Not applicable |
-| **DB_PORT** | 3306 | 5432 | Not applicable |
-
-**Note:** The only required field for SQLite is **DB_NAME**.
-
-### 3. Adminer
-
-Adminer is UI tool for viewing the database contents and executing queries.
-
-It supports MySQL, PostgreSQL, SQLite.
-
-**URL**: http://invoiceshelf.test:8080
-
-#### MySQL/PostgresSQL
-
-To log into the MySQL or PostgresSQL, use the database information specified in the above section (2. Databases)
-
-#### SQLite
-
-To log into the SQLite, use the following credentials:
-
-| KEY | VALUE |
-|--------------|------------------------------|
-| **USERNAME** | admin |
-| **PASSWORD** | admin |
-| **DATABASE** | /storage/app/database.sqlite |
-
-
-### 4. Mailpit (fake mail)
-
-To utilize Mailpit, use the following credentials:
-
-| KEY | VALUE |
-|---------------------|-------------|
-| **MAIL DRIVER** | smtp |
-| **MAIL HOST** | mail |
-| **MAIL PORT** | 1025 |
-| **MAIL ENCRYPTION** | none |
-| **MAIL USER** | leave empty |
-| **MAIL PASS** | leave empty |
-| **FROM MAIL ADDR** | your choice |
-| **FROM MAIL NAME** | your choice |
-
-
-**URL**: http://invoiceshelf.test:8025
-
----
-
-If you have any questions, feel free to open issue.
+The six Compose definitions in this directory cover all three databases, with
+and without Gotenberg. The `./devenv` helper is the supported entry point, but
+you can inspect or run those files directly when debugging the stack.
+Run `./devenv --help` for the complete command list.
diff --git a/readme.md b/readme.md
deleted file mode 100644
index c221a281..00000000
--- a/readme.md
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-## Introduction
-
-InvoiceShelf is an open-source web app that helps you track expenses, record payments, and create professional invoices and estimates. It is self-hosted, multi-tenant, and built for individuals and small businesses that want to keep their books on their own infrastructure.
-
-The web application is built with Laravel and Vue 3.
-
-To get started using Docker Compose, follow the [Installation guide](https://docs.invoiceshelf.com/installation.html).
-
-# Table of Contents
-
-1. [Documentation](#documentation)
-2. [System Requirements](#system-requirements)
-3. [Download](#download)
-4. [Discord](#discord)
-5. [Roadmap](#roadmap)
-6. [Translate](#translate)
-7. [License](#license)
-
-## Documentation
-
-- [Installation Steps](https://docs.invoiceshelf.com/installation.html)
-- [User Guide](https://docs.invoiceshelf.com/)
-- [Developer Guide](https://docs.invoiceshelf.com/developer-guide.html)
-- [API Documentation](https://api-docs.invoiceshelf.com)
-
-## System Requirements
-
-- **PHP 8.4+** is required (since v2.2.0, when InvoiceShelf moved to Laravel 13).
-- Database: MySQL, MariaDB, PostgreSQL, or SQLite.
-- Before updating from inside the app, verify your server meets the target version's PHP and extension requirements.
-- The in-app updater verifies requirements and refuses to proceed if they are not met.
-
-## Download
-
-- [Download Link](https://invoiceshelf.com)
-
-## Discord
-
-Join the discussion on the InvoiceShelf Discord: [Invite Link](https://discord.gg/eHXf4zWhsR)
-
-## Roadmap
-
-Rough roadmap of things to come, not in any specific order:
-
-- [x] Automatic Update
-- [x] Email Configuration
-- [x] Installation Wizard
-- [x] Address Customisation & Default Notes
-- [x] Edit Email before Sending Invoice
-- [x] Available as a Docker image
-- [x] Performance Improvements
-- [x] Customer View Page
-- [x] Custom Fields on Invoices & Estimates
-- [x] Multiple Companies
-- [x] Recurring Invoices
-- [x] Customer Portal
-- [x] Decoupled system settings from company settings _(v3.0)_
-- [x] Proper multi-tenancy system _(v3.0)_
-- [x] Company member invitations with custom roles _(v3.0)_
-- [x] Dark mode _(v3.0)_
-- [x] Full TypeScript refactor of the frontend _(v3.0)_
-- [x] Improved backend architecture _(v3.0)_
-- [x] Security hardening _(v3.0)_
-- [ ] **Reworked installation wizard** _(v3.0)_
-- [ ] **Module Directory** _(v3.0)_
-- [ ] **Rewritten Payments module** _(v3.0)_
-- [ ] Accept Payments (Stripe integration)
-- [ ] Improved template system for invoices and estimates
-
-## Translate
-
-Help us translate InvoiceShelf into your language: https://crowdin.com/project/invoiceshelf
-
-## Star History
-
-
-
-
-
-
-
-
-
-## License
-
-InvoiceShelf is released under the [GNU Affero General Public License v3.0](LICENSE). See [LICENSE](LICENSE) for the full text.
diff --git a/resources/static/img/invoiceshelf-dashboard.png b/resources/static/img/invoiceshelf-dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..56c3ed7adda1506b322c109f5fd003daff52589d
GIT binary patch
literal 230282
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