Skip to content

Latest commit

 

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Portfolio (Laravel Based)

JXG Terminal Logo

A production-ready personal portfolio built with Laravel. It features SEO-optimized public pages, an admin area to manage content, and visitor analytics.

Visit Here: jayxcoder.duckdns.org

Features

  • Public pages: Home, About, Skills, Projects, Portfolio, Experience, Contact
  • Individual portfolio items by slug (/portfolio/{slug})
  • Contact form submission with admin review workflow
  • Admin authentication, profile management, and role-based access
  • Portfolio and Work Experience CRUD (publish, feature, sort order)
  • Visitor analytics API and admin dashboards (unique visitors, page views, devices, browsers, countries)
  • Agentic RAG chat grounded in portfolio, skills, achievements, experience, and LinkedIn posts
  • Local Ollama inference with separate qwen chat/reasoning and embedding models
  • Admin knowledge console for health, reindexing, LinkedIn OAuth sync, and LinkedIn export import
  • SEO: sitemap, robots, Open Graph, Twitter cards, structured data slots
  • Asset pipeline via Vite; modern, responsive Bootstrap 5 UI
  • Secure route grouping for admin with HTTPS enforcement

Tech Stack

  • Laravel 10/11 (PHP 8.2+)
  • MySQL or MariaDB (any SQL DB supported by Laravel)
  • Redis (optional) for cache/queue
  • Bootstrap 5, Font Awesome, Google Fonts
  • Vite for asset bundling
  • Docker and Docker Compose (optional)
  • Ollama with qwen3.5:2b and qwen3-embedding:0.6b

Repository Structure (high level)

  • app/Http/Controllers — Public and admin controllers
  • app/Models — Eloquent models: Portfolio, WorkExperience, Contact, Visitor, User
  • resources/views — Blade views; layouts/app.blade.php is the main layout
  • routes/web.php — Public/admin routes, SEO routes, file-serving helpers
  • public/ — Public assets, robots.txt, sitemap*.xml
  • storage/ — Uploaded images and framework storage

Requirements (manual/local)

  • PHP 8.2+
  • Composer
  • Node 18+ and npm (for Vite dev/build)
  • MySQL/MariaDB running locally

Quick Start (manual)

  1. Copy environment file and set credentials:
cp .env.example .env
php artisan key:generate
  1. Configure DB in .env (DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD).

  2. Install dependencies:

composer install
npm install
  1. Run migrations and optionally seed:
php artisan migrate
# php artisan db:seed
  1. Link storage and start servers:
php artisan storage:link
php artisan serve
npm run dev

Visit http://127.0.0.1:8000.

Docker / Portainer

The stack (docker-compose.yml, Dockerfile) is at the repository root.

See PORTAINER.md for deploying via Portainer → Stacks → Git repository with your .env.

Quick local test:

cp .env.example .env
# Set APP_KEY, DB_PASSWORD, OLLAMA_HOST, etc.
docker compose up -d --build

Open http://localhost:8080 (or APP_PORT).

Useful container commands

  • Shell into PHP container: docker compose exec app sh
  • Run artisan: docker compose exec app php artisan <cmd>
  • Assets are built inside the image (npm run build at build time)

Admin Access

  • Visit /admin/login
  • Set in .env (Docker/Portainer environment variables):
ADMIN_NAME=Admin
ADMIN_EMAIL=you@example.com
ADMIN_PASSWORD=your-strong-password-here

On container start, admin:sync creates or updates that user. After changing ADMIN_PASSWORD, restart the app container.

Manual sync:

php artisan admin:sync
# Docker: docker compose exec app php artisan admin:sync

You can still change name/email/password later in Admin → Profile (/admin/profile).

SEO

  • GET /sitemap.xml and GET /robots.txt are generated by routes
  • Set APP_URL in .env correctly for canonical links

Environment Variables

Key variables you may need:

  • APP_NAME, APP_ENV, APP_KEY, APP_URL
  • DB_* — database configuration
  • SESSION_DRIVER, CACHE_DRIVER, QUEUE_CONNECTION
  • LOG_CHANNEL, LOG_LEVEL
  • OLLAMA_HOST, OLLAMA_MODEL, OLLAMA_EMBEDDING_MODEL
  • RAG_ENABLED, RAG_TOP_K, RAG_MIN_SEMANTIC_SCORE
  • LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET, LINKEDIN_REDIRECT_URI (optional)

See docs/RAG.md for indexing, LinkedIn ingestion, verification, and operations.

Testing

php artisan test

Deployment Notes

  • Ensure APP_ENV=production and APP_DEBUG=false
  • Run php artisan config:cache route:cache view:cache
  • Serve the public/ directory via your web server
  • Configure HTTPS termination and set APP_URL to https://...

License

This project is licensed under the Eclipse Public License v2.0 (EPL-2.0).

Key Points:

  • Open Source: Free to use, modify, and distribute
  • Commercial Use: Allowed for commercial purposes
  • Copyleft: Derivative works must also be distributed under EPL-2.0
  • Patent Protection: Includes patent grants and protections
  • Source Code: Must be made available when distributing

Full License Text

See LICENSE.txt for the complete license terms.

Quick Summary

You are free to:

  • ✅ Use this software for any purpose
  • ✅ Modify and create derivative works
  • ✅ Distribute copies (with source code)
  • ✅ Use in commercial products

You must:

  • 📋 Include the license text with distributions
  • 📋 Make source code available when distributing
  • 📋 License derivative works under EPL-2.0

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages