# Brokam International — Corporate Website

The public marketing website for **Brokam International Ltd** (brokaminternational.com),
built per the SRS & Implementation Plan in the parent folder.

- **Stack:** Laravel 13 (PHP 8.3) · Blade · Tailwind CSS v4 (Vite) · Alpine.js · SQLite (dev)
- **Design:** dark, minimal "neon-glow" futuristic — near-black canvas, brand-orange `#B35327`
  glow accents, hairline grid, monospace micro-labels, glass cards, and compact bento tiles.
  Fonts: Sora (display) + IBM Plex Sans (body) + JetBrains Mono (labels).
  The public site theme is scoped under a `.theme-dark` body class so the **admin CMS stays
  light** while sharing one CSS bundle — flip the `--color-*` overrides in
  `resources/css/app.css` to retheme.

## What's included

| Area | Detail |
|------|--------|
| Pages | Home, About, Our Approach, Industries, Services overview + **6 service detail pages**, Projects (list + detail, industry filter), News & Insights (list + detail), Contact, Request-a-Quote (RFQ), Suppliers, Careers, Privacy, Search |
| Lead capture | Contact + RFQ forms with server-side validation, honeypot + rate-limit spam protection, **service-based routing** to team mailboxes, confirmation + internal notification emails |
| Content model | Fixed editorial content (services, industries, approach, values) in `config/brokam.php`; growing content (Projects, Articles, Enquiries) in the database with models, migrations & seeders |
| SEO | Per-page `<title>`/meta/canonical, Open Graph, JSON-LD (Organization, Service, Article), dynamic `sitemap.xml`, `robots.txt` |
| A11y | Semantic landmarks, skip-link, focus styles, keyboard-navigable mega-menu, reduced-motion support |

## Prerequisites

- PHP 8.2+ (this machine: 8.3.31 via winget — already on PATH in new shells)
- Composer (installed at `C:\tools\composer\composer.phar` — run as `php C:\tools\composer\composer.phar`)
- Node.js 18+ (this machine: v24)

## Run locally

```bash
# from this folder
composer install            # if vendor/ is missing
npm install                 # if node_modules/ is missing
php artisan migrate --seed  # create + seed the SQLite database
npm run build               # build CSS/JS  (or: npm run dev  for hot reload)
php artisan serve           # http://127.0.0.1:8000
```

> Dev DB is SQLite at `database/database.sqlite`. Switch to MySQL/MariaDB for
> production by setting `DB_*` in `.env`.

## Email

`.env` ships with `MAIL_MAILER=log` (messages are written to
`storage/logs/laravel.log`). For production set real SMTP credentials
(`MAIL_HOST`, `MAIL_PORT`, `MAIL_USERNAME`, `MAIL_PASSWORD`, `MAIL_SCHEME`)
with SPF/DKIM aligned, per the SRS.

Enquiries are routed by selected service to `broadcast@`, `ict@`, `security@`,
`power@`, `procurement@`, `integration@` (or `sales@` for general) — see
`app/Support/EnquiryRouter.php`.

## Admin / CMS

A built-in admin panel lets non-technical staff manage content and leads.

- **URL:** `/admin` (or "Staff login" in the site footer → `/login`)
- **Seeded account:** `admin@brokaminternational.com` / `password` — **change this in production.**
- **Manage:** Projects (full CRUD), News & Insights articles (full CRUD), and an
  Enquiries inbox (view, filter by status/type, update status new→in-progress→closed,
  reply by email, delete). Dashboard shows counts and recent enquiries.
- Slugs auto-generate from titles; project "services involved" and "outcomes" are
  entered one-per-line and stored as JSON.

Add more admin users with `php artisan tinker`:
`App\Models\User::create(['name'=>'…','email'=>'…','password'=>'…']);`
(the password is hashed automatically).

## Editing content

- **Services / industries / approach / values / company facts:** `config/brokam.php`
  (fixed editorial content — edit the file directly).
- **Projects & News articles:** via the **admin panel** (or seeded in
  `database/seeders/DatabaseSeeder.php`).
- **Brand assets:** `public/brand/` (Brokam v2 hex-mesh logo set + favicons).
- **Enquiries** submitted via the site are stored in the `enquiries` table and
  surfaced in the admin inbox.

## Deploy (cPanel / shared hosting, per Implementation Plan)

1. `npm run build` locally and upload `public/build`.
2. Upload the app; point the web root at `public/`, keep the app core above it.
3. `composer install --no-dev --optimize-autoloader`
4. Set `.env` (production `APP_ENV`, `APP_URL`, DB, SMTP); `php artisan key:generate` if needed.
5. `php artisan migrate --force && php artisan db:seed --force`
6. `php artisan config:cache route:cache view:cache`
7. Verify AutoSSL/HTTPS.

## Notes / next steps

- The website SRS mentions a navy/blue palette, but the **supplied brand assets are
  orange + slate** — the build follows the real assets. Swap `--color-brand-*` in
  `resources/css/app.css` if the palette is revised.
- Future enhancements (from SRS §6): headless CMS/admin UI, multilingual switcher,
  analytics + cookie-consent integration, client portal.
