Jean-Pierre Niyibizi - Geotechnical Engineer Portfolio
Defines a PHP portfolio site with SQLite, admin CRUD, blog, and contact form for a geotechnical engineer.
What this file does
Defines a PHP portfolio site with SQLite, admin CRUD, blog, and contact form for a geotechnical engineer.
When to use it
- Building a PHP portfolio site with SQLite and no external dependencies
- Creating an admin dashboard with content management for a personal website
- Setting up a blog and portfolio showcase with SEO fields and rich text editing
- Starting a Replit project with PHP built-in server and custom routing
Assumes this stack
Jean-Pierre Niyibizi - Geotechnical Engineer Portfolio
Project Overview
Professional portfolio and business website for Jean-Pierre Niyibizi, a Geotechnical Engineer and Africa Sustainability Advocate. The site features:
- Dynamic content management system
- Blog and portfolio showcases
- Contact form for client inquiries
- Admin dashboard for content updates
- SQLite database (no external DB required)
Technical Stack
- Language: PHP 8.2.23
- Database: SQLite (file-based, portable)
- Frontend: Bootstrap 5, vanilla JavaScript
- Architecture: MVC-like pattern with routing
Project Structure
/
├── admin/ # Admin panel (login, dashboard, content management)
├── public/ # Public-facing website
│ ├── assets/ # Images, logos, static files
│ ├── partials/ # Reusable components (nav, footer, sections)
│ └── uploads/ # User-uploaded content
├── db.php # Database bootstrap & auto-seeding
├── db.sqlite # SQLite database file
└── router.php # Custom routing logic
Key Features
- Auto-initializing Database:
db.phpcreates and seeds the database on first run - Admin Dashboard: Located at
/adminwith full CRUD capabilities - Dynamic Sections: Content sections managed via database
- Security: CSRF protection, prepared statements, input sanitization
- Contact Form: Built-in with message storage
Development Setup (Replit)
The server runs on port 5000 using PHP's built-in server with custom routing:
php -S 0.0.0.0:5000 -t . router.php
Default Admin Credentials
- Username: admin
- Password: admin123
- Note: Change password immediately after first login via the dashboard
Recent Changes
-
2025-10-09 (Latest): Added Rich Text Editor and SEO Features
- Integrated TinyMCE rich text editor for blog posts and portfolio content
- Added SEO fields: URL slugs, meta descriptions, and meta keywords
- Implemented auto-slug generation from titles (URL-friendly)
- Redesigned admin dashboard with modal-based editing UI
- Enhanced blog posts and portfolio management with better UX
- Database migration: Added meta_description, meta_keywords, and slug columns to posts and portfolio tables
-
2025-10-09: Fresh GitHub import and Replit environment setup
- Verified PHP 8.2.23 is installed and working
- Configured workflow "Server" on port 5000 (0.0.0.0:5000) with router.php
- Added favicon.ico handler to router.php to serve logo.jpg as favicon
- Configured autoscale deployment for production
- Verified all pages work: homepage, blog, portfolio, admin login
- Confirmed database (db.sqlite) exists and is functional
- All static assets (images, CSS, JS) are loading correctly
Database Tables
users- Admin users and authenticationsettings- Site-wide configurationsections- Dynamic page sectionsmessages- Contact form submissionsposts- Blog postsportfolio- Portfolio projectsnewsletter_subscribers- Email subscriptionscontent_elements- Granular content management
Important URLs
- Homepage:
/or/public/index.php - Admin Login:
/admin/login.php - Admin Dashboard:
/admin/dashboard.php - Blog:
/public/blog.php - Portfolio:
/public/portfolio.php
User Preferences
None documented yet.
Notes
- No external dependencies (no Composer, no npm)
- Database auto-creates on first access
- Uploads directory has security rules via .htaccess
- All forms include CSRF protection
What's inside
Project overview, tech stack, directory tree, 5 key features, 8 database tables, 5 important URLs, 2 changelog entries
Change this for your project
- Replace
Jean-Pierre Niyibiziwith your own name throughout - Replace
admin/admin123default credentials with your own - Replace
jp091920250358repository name in your own setup
Where it goes
Keep it in your repository where the agent or team that needs it will read it.
Worth borrowing
- Auto-seeding database on first run via
db.php - Modal-based editing UI in admin dashboard for content management
Related Documents
GOOBY - Closing Store Marketplace
Defines a full-stack marketplace app for discovering closing retail stores in NY/NJ/CT/PA, with automated closure scanning and admin review.
Lua Code Obfuscator/Deobfuscator
Provides a full-stack web app for obfuscating and deobfuscating Roblox Lua scripts with a Monaco editor and PostgreSQL storage.
GREEN NODE - Project Overview
Describes a full-stack recycling platform with three runtime modes, provider architecture, and development scripts for Cochabamba, Bolivia.
ADN Systems DMR Peer Server
Documents a forked FreeDMR server for amateur radio DMR voice/data routing with bridges, proxies, scheduled voice announcements, and centralized security.