Northvale – Websites & CMS Software | Vibe96

Websites & CMS

Northvale

Source code included

Laravel website & CMS with six switchable homepage designs for marketing agencies and consultancies

Built by Buildify Updated 19 Oct 2026 113,647 lines of code

Open live demo Built withClaude Code

Why Northvale

What makes it better
than the alternatives

  1. 01

    Six complete homepage designs

    Switch themes instantly without losing content, blog posts, leads or media

  2. 02

    Full Arabic site at /ar/ with right-to-left layout, Arabic fonts and translated content; language switch and hreflang tags built in

    Full Arabic site at /ar/ with right-to-left layout, Arabic fonts and translated content; language switch and hreflang tags built in

  3. 03

    First-party, cookie-less visitor analytics

    No IP addresses stored, visitors hashed daily, optional GeoLite2 country lookup

  4. 04

    Theme pipeline included

    Python converter turns static HTML into editable CMS themes with pixel-diff validation (tools/theme-converter/)

  5. 05

    Optional public demo mode

    Demo account, content auto-reset, design switcher for visitors, iframe embedding (CMS_DEMO_MODE=true)

Website (6 themes)

  • Six homepage designs: Corporate Classic (home-01)
  • Editorial Agency (home-02)
  • Luxury Advisory (home-03)
  • Swiss Studio (home-04)
  • Soft Modern (home-05)
  • Creative Collage (home-06)
  • Pages: Home
  • About
  • Team
  • Services
  • Service detail
  • Portfolio
  • Blog
  • Article
  • Contact
  • Privacy/Terms/Cookie; custom pages can be added
  • Arabic site at /ar/ with RTL layout
  • Arabic font (Noto Kufi Arabic)
  • translated content; language switch button
  • Dark-mode toggle
  • responsive layouts
  • self-hosted fonts (Schibsted Grotesk
  • Newsreader
  • DM Mono
  • Work Sans
  • Libre Baskerville
  • Manrope
  • Montserrat
  • JetBrains Mono
  • Roboto Mono
  • Inter
  • Outfit
  • Space Grotesk
  • DM Serif Display
  • Jost
  • Cormorant Garamond
  • IBM Plex Mono)
  • SEO meta tags
  • Open Graph
  • JSON-LD structured data
  • sitemap.xml
  • robots.txt
  • hreflang links
  • Contact form (name
  • email
  • company
  • phone
  • message
  • service
  • budget
  • extra fields) with honeypot
  • timing check
  • rate limiting
  • optional reCAPTCHA v3
  • Newsletter form (email) with honeypot
  • timing check
  • rate limiting
  • optional reCAPTCHA v3
  • Security headers
  • framing rules (ALLOW_FRAMING_FROM)
  • CSRF protection
  • script URL removal from rendered pages

Admin Panel

  • Dashboard: new leads panel
  • visitor stats (today
  • yesterday
  • last 7/30 days)
  • top pages
  • recent activity
  • Configurable admin path (Settings → Security or CMS_ADMIN_PATH; default /admin)
  • Two roles: administrator (full access) and editor (cannot change settings
  • users
  • email templates)
  • Sign-in with email/password
  • remember me
  • session timeout (SESSION_LIFETIME minutes)
  • activity log
  • Every admin route requires auth + active user; Livewire components re-check user on every request
  • Admin mutations only through authenticated Livewire components or routes; public writes limited to contact/newsletter forms and analytics beacon

Pages & SEO

  • Page editor: sections (edit
  • reorder
  • hide
  • duplicate
  • add from theme's section library)
  • draft → preview (signed link) → publish
  • 30 restorable revisions per page (page_revisions table)
  • Per-page SEO: meta title
  • meta description
  • canonical URL
  • Open Graph title/description/image
  • robots index/follow
  • show in sitemap
  • Page templates: home
  • about
  • team
  • services
  • service (detail)
  • portfolio
  • blog
  • post (article)
  • contact
  • privacy
  • terms
  • cookie
  • custom
  • Section content keys: t# (text)
  • a# (link/image)
  • g# (repeatable group)
  • v# (hidden design value); Arabic = <key>_ar
  • Section schema defined in resources/themes/<slug>/schema/<type>.json (text
  • textarea
  • richtext
  • image
  • link
  • select
  • repeater
  • toggle
  • color
  • number)
  • Rich text sanitised with HTMLPurifier (App\Cms\Prose::sanitize); script URLs removed by UrlGuard

Blog

  • Rich-text editor (TipTap: bold
  • italic
  • link
  • image
  • headings
  • lists
  • blockquote
  • code)
  • Categories
  • tags
  • author name
  • cover image
  • excerpt
  • featured article toggle
  • Scheduling: draft
  • scheduled (published_at future)
  • published
  • Per-article SEO: meta title
  • meta description
  • canonical URL
  • Open Graph title/description/image
  • robots index
  • Article URL: /blog/{slug}; Arabic: /ar/blog/{slug}
  • JSON-LD structured data (Article schema) with headline
  • description
  • image
  • datePublished
  • dateModified
  • author
  • publisher

Content Blocks (shared by all themes)

  • Services: title
  • slug
  • summary
  • description (rich text)
  • icon
  • image
  • is_active
  • order
  • meta_title
  • meta_description; URL /services/{slug}
  • Case studies (Portfolio): title
  • client
  • category
  • year
  • description (rich text)
  • cover_image
  • gallery (images)
  • is_featured
  • order
  • Team: name
  • role
  • bio (rich text)
  • photo
  • email
  • linkedin_url
  • order
  • is_active
  • Testimonials: client_name
  • client_role
  • client_company
  • quote
  • photo
  • rating (1-5)
  • is_featured
  • order
  • Clients (logos): name
  • logo
  • website_url
  • order
  • Offices: city
  • address
  • phone
  • email
  • map_url
  • order
  • Key numbers: label
  • value
  • suffix
  • order
  • Process steps: title
  • description
  • icon
  • order
  • FAQ: question
  • answer (rich text)
  • category
  • order
  • All content blocks translatable (English + Arabic); Arabic fields stored in translations JSON column (HasTranslations trait)

Leads & Subscribers

  • Leads: name
  • email
  • company
  • phone
  • message
  • service
  • budget
  • extra fields (JSON)
  • source_url
  • ip
  • status (new/contacted/qualified/converted/closed)
  • notes
  • created_at
  • Lead workflow: New → Contacted → Qualified → Converted / Closed; status filter
  • search (name
  • email
  • company
  • message)
  • period filter
  • service filter
  • CSV export (leads.export route): Received
  • Status
  • Name
  • Email
  • Phone
  • Company
  • Interest
  • Budget
  • Message
  • Page
  • Other fields
  • Newsletter subscribers: email
  • status (subscribed/unsubscribed)
  • language (en/ar)
  • source_url
  • ip
  • created_at
  • Subscriber actions: add
  • unsubscribe
  • delete
  • CSV export
  • Welcome email sent on subscription (newsletter_welcome template) unless demo mode

Media Library

  • Upload images (JPEG
  • PNG
  • GIF
  • WebP
  • SVG); images re-encoded to JPEG/PNG
  • SVGs sanitised
  • Image details: filename
  • size
  • dimensions
  • upload date
  • usage (pages
  • posts
  • services
  • team
  • case studies
  • testimonials
  • clients)
  • Delete with usage check (warns if used); bulk delete
  • Storage: public/storage/media/ (symlinked from storage/app/public/media/)
  • Media picker component (Livewire) for selecting images in admin forms

Themes

  • Six installed themes: corporate-classic (default)
  • editorial-agency
  • luxury-advisory
  • swiss-studio
  • soft-modern
  • creative-collage
  • Theme structure: theme.json (pages
  • bindings
  • compose)
  • sections/ (Blade views)
  • schema/ (field definitions)
  • chrome/ (header/footer)
  • custom/ (CSS/JS)
  • seed/content.json
  • media/images/
  • Theme preview: view any installed theme with your content before activating (signed URL with ?_theme=slug)
  • Brand colours: primary
  • secondary
  • accent (per theme); font families: heading
  • body
  • mono (per theme)
  • Theme bindings: connect section lists to content modules (services
  • team
  • posts
  • case studies
  • testimonials
  • clients
  • offices
  • key numbers
  • process steps
  • FAQ) via theme.json → bindings
  • Theme installation: php artisan cms:install --theme=<slug> or cms:theme-refresh <slug> --force (re-imports original content)
  • Theme converter: tools/theme-converter/convert.py (static HTML → CMS theme); pixel-diff checker: tools/theme-converter/pixel_diff.py

Analytics

  • First-party
  • cookie-less visitor tracking: visitor hash = sha256(daily salt + IP + user agent + host); no IP addresses stored
  • Sessions: visitor_hash
  • started_at
  • last_seen_at
  • landing_path
  • exit_path
  • referrer_host
  • referrer_url
  • utm_source
  • utm_medium
  • utm_campaign
  • device
  • browser
  • os
  • country_code
  • country
  • city
  • pageviews
  • duration_seconds
  • Page views: session_id
  • path
  • title
  • viewed_at
  • duration_seconds (updated by ping beacon every 15s)
  • Dashboard stats: visits today/yesterday/last 7 days/last 30 days
  • page views
  • top pages (path
  • views
  • avg duration)
  • Optional GeoLite2 country/city lookup (MaxMind DB reader; database not included
  • download separately)
  • Optional Google Analytics 4 integration (GA4 tracking ID in Settings → Analytics)
  • Exclude admins toggle (Settings → Analytics); bots ignored (UserAgent::isBot)
  • Data retention: delete analytics older than retention_days (Settings → Analytics; default 395 days); cron: php artisan cms:analytics-prune (scheduled daily at 03:15)

Settings & Configuration

  • General: site name
  • tagline
  • default language
  • timezone
  • Email delivery: SMTP host
  • port
  • username
  • password (encrypted)
  • from address
  • from name
  • encryption (TLS/SSL/none)
  • Forms: contact success message
  • newsletter success message
  • reCAPTCHA enabled
  • site key
  • secret key (encrypted)
  • min score (0.0-1.0)
  • Analytics: enabled
  • exclude admins
  • retention days
  • GA4 tracking ID
  • SEO: organization name
  • default meta description
  • title suffix
  • robots index
  • Open Graph image
  • Scripts: header scripts (before </head>)
  • footer scripts (before </body>)
  • Security: admin path (CMS_ADMIN_PATH)
  • allowed framing origins (ALLOW_FRAMING_FROM)
  • Language & display: Arabic site enabled
  • dark mode enabled
  • Header & Footer: menus (label
  • URL
  • Arabic label
  • order
  • parent_id for dropdowns)
  • logos (main logo
  • footer logo
  • dark mode variants)
  • Email templates: contact_notification
  • newsletter_welcome
  • lead_status_update (subject
  • body with {{placeholders}})
  • Users: name
  • email
  • role (administrator/editor)
  • is_active
  • last_login_at; create
  • edit
  • deactivate
  • delete
  • Account: change name
  • email
  • password (current password required; min 10 chars
  • mixed case
  • numbers
  • symbols)

Quality report

Manually reviewed

91/ 100

Automated audit score

✓ Passed the audit

Passed the audit and a manual review.
Audit run: 14 Oct 2026
Reviewed by Vibe96 staff, Dubai.

Security93
Code structure70
Docs & completeness100
Dependency health95
Build & deploy92
Reviewer notes (3 minor)

Strong auth guards on all mutating endpoints; minor ownership gaps on read-only analytics; no critical vulnerabilities; some outdated packages and missing composer.lock; weak default passwords in docker-compose.yml and example files; database access is mostly safe; a few missing indexes and one unscoped delete; moderate code duplication and some oversized components; generally well-structured but refactoring opportunities exist; build reproducible with gaps: missing node build step, unclear db setup, demo password exposed. None of these stop the software from working; the developer has been told and improvements come in a future update.

Versions & updates

1.0.0
First release19 Oct 2026✓ Reviewed & audited

No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.

Quality report

What you get

  • </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
  • ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
  • ↻One year of updatesEvery new version the builder publishes, free for 12 months.
  • ♧30 days of supportInstallation and defect support through Vibe96 tickets.
$199Single-site licence Details