77 lines
3.4 KiB
Markdown
77 lines
3.4 KiB
Markdown
# 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.
|