visitor@laratermio:~

laratermio

Your portfolio lives in the terminal. Visitors type commands to explore your work — no scrolling, no nav menus, no template layout.

laratermio — demo
laratermio demo

concept
An interactive terminal, not a webpage

The entire portfolio runs inside a browser-based terminal emulator. A visitor arrives, sees a prompt, and starts typing. There are no hero images, no carousels, no "contact me" buttons. Just a cursor and commands — and the discipline to make that interesting.

laratermio — bash
visitor@laratermio:~$ help
 
explore
aboutWho I am and what drives me
contactGet in touch
contact <email> <message>Drop your email and a short message
educationEducation & certifications
open <name>Open a link in a new tab
search <query>Search across education, experience, projects, skills
skillsTechnical skills and stack
experience
experienceWork history
experience <n>Jump directly to experience n
experience -aFull work history at once
projects
projectsSide projects and open source
projects <n>Jump directly to project n
projects -aAll projects at once
system
cd <dir>Navigate the portfolio filesystem
clearClear the terminal screen
historyShow command history
lsList contents of current directory
theme <mode>Switch color scheme (light / dark / system)
whoamiPrint current user identity

Curious? There are more commands that won't appear in help — explore and find them.


stack
What it runs on

Managed through a Filament 5 admin panel. All content — experience, projects, skills, terminal commands — lives in the database and is fully editable without touching code.

visitor@laratermio
─────────────────────
Terminal:laratermio
Framework:Laravel 13
PHP:8.5
UI:Livewire 4
Admin:Filament 5
CSS:Tailwind 4
Shell:jQuery Terminal
Media:Spatie Media Library
Mail:Resend
Database:MySQL 8
Tests:Pest 4

feature
PDF CV — generated from your content

Your terminal content doubles as a CV. Hit "Generate" in the admin panel and DomPDF renders everything — experience, education, skills, projects, contact — to a clean A4 PDF. The CV link appears automatically in the terminal nav once the file exists. One source of truth for your portfolio and your resume.

$ cv

One button in the admin panel. Experience, education, skills, and projects rendered to A4. The terminal picks it up automatically — no config, no code change.

PDF export

local development
Run the project

Sail / Docker (recommended — no local MySQL needed)

step 1
git clone sonole/laratermio
cd laratermio
cp .env.example .env
sail up -d
  ↳ app + MySQL containers
step 2
sail artisan optimize
sail artisan key:generate
sail artisan optimize
sail artisan migrate --seed
step 3
sail npm install
sail npm run dev
  ↳ visit localhost

seeding content

db:seed (and SystemSeeder) only seeds the admin user and terminal commands. Portfolio content is seeded separately. Pick one:

content seeding options
# Placeholder / demo content — fictitious data, safe to share
php artisan db:seed --class=ContentSeeder
 
# Your real content — edit PersonalContentSeeder with your own data first
php artisan db:seed --class=PersonalContentSeeder
 
# Or re-seed individual sections without touching the rest:
open localhost/admin/import-demo-content

Both seeders truncate their tables before inserting. Settings files and project media are deleted from disk and re-attached from public/stubs/. Prefix with ./vendor/bin/sail artisan when using Sail.

.env — required values
# ── App ─────────────────────────────
APP_URL=http://localhost
 
# ── Database ─────────────────────────
DB_HOST=mysql
DB_DATABASE=laratermio
DB_USERNAME=laratermio
DB_PASSWORD=
 
# ── Mail (Resend) ─────────────────────
RESEND_API_KEY=re_...
MAIL_FROM_ADDRESS=[email protected]
 
# ── Admin (created on first seed) ─────
# Contact form messages are delivered here
ADMIN_EMAIL=[email protected]
ADMIN_NAME="Your Name"

Admin at localhost/admin — default password is password, forced change on first login.


testing
Run the suite
laratermio — bash
sail composer run test        # pint + phpstan + pest
sail artisan test --compact     # just pest
sail composer run types:check  # larastan only
 
# or directly:
sail bin phpstan analyse --memory-limit 1G