# TuxiNet Portal This repository contains the groundwork for a dark-themed, responsive customer portal that unifies customer management, project tracking, and an issue/bug workflow. The stack uses vanilla PHP 8.2+ with a lightweight framework layer tailored for Simply.com hosting environments and the `portal.tuxinet.dk` subdomain deployment. ## Features included in this initial foundation - Minimal front controller with PSR-4 autoloading and route registration. - Session-backed authentication service with Argon2id password hashing. - Dark mode responsive layout scaffold for login and dashboard views. - Config-driven environment loading via `.env` file. - MySQL-compatible migration runner with dedicated migrations for all core domain tables (customers, projects, issues, comments, attachments, subscriptions, activity, audit, and settings). - Configurable mail service built on PHPMailer with SMTP and sendmail support tailored for Simply.com hosting. - TuxiNet.dk branding assets plus shared document templates for offers and invoices that automatically include the company logo. - Extensible service, model, and middleware layers prepared for RBAC, notifications, and future modules. ## Getting started 1. Copy `.env.example` to `.env` and adjust connection credentials: ```bash cp .env.example .env ``` 2. Install dependencies (including PHPMailer): ```bash composer install ``` 3. Configure the database credentials for your Simply.com MySQL server and adjust upload/mail parameters in `.env`. 4. Review the branding block at the bottom of `.env` or `config/branding.php` if you need to update the default company name, public domain, or logo path. By default the portal ships with the TuxiNet.dk logo located at `public/assets/branding/tuxinet-logo.svg`, which is automatically included on all rendered offers and invoices. 5. Run migrations to create all database tables: ```bash php bin/migrate ``` 6. Point your web server document root to `public/` and ensure the vhost/subdomain is `portal.tuxinet.dk` so absolute URLs render correctly. 7. Create an initial sysadmin user manually (e.g. via SQL) and log in using `/login`. ## Next steps - Implement RBAC-aware route middleware for each role and feature module. - Flesh out controllers/views for customers, projects, issues, and settings management. - Integrate mail notifications, subscription logic, and audit logging handlers. - Add file upload handling with MIME validation and thumbnail generation. - Build CSV export, saved filters, and read-only sharing features. ## Branding & document templates - The active logo lives at `public/assets/branding/tuxinet-logo.svg` and is referenced via `config('branding.logo_path')`. - Update `.env` if you need to change the brand copy or email signature. The defaults reflect the TuxiNet.dk identity and the `portal.tuxinet.dk` hostname. - Offer and invoice renderers can target the shared templates at `resources/views/documents/offer.php` and `resources/views/documents/invoice.php`. Both templates automatically include the logo header defined in `resources/views/documents/layout.php`. ## Folder structure ``` app/ Controllers/ Core/ Http/Middleware/ Models/ Services/ Support/ bootstrap/ config/ database/migrations/ public/ resources/views/ routes/ ``` This structure keeps the codebase organised and ready for incremental feature development across authentication, project management, and notification workflows.