Collections/DEVELOPMENT.md
Edwin Noorlander 9f9617ca45 Add development documentation and enhance SPA navigation with category/item detail views
- Add DEVELOPMENT.md with complete LXC environment setup guide
- Implement dynamic category tree with item navigation in sidebar
- Add category detail view with items list via AJAX
- Add item edit form with delete functionality
- Enhance SPA routing to support query parameters for categories/items
- Update Bootstrap styling with icons and improved navigation
- Include SQLite database in repository for development
2025-11-12 09:51:01 +01:00

203 lines
5.4 KiB
Markdown

# LocalWeb Development Environment Guide
## Overview
This document describes the LocalWeb Collections PHP MVC application development environment setup using LXC containers.
## Architecture
### Host Environment
- **Location**: `/home/edwin/Documents/Projects/localweb/`
- **User**: `edwin`
- **Container Runtime**: Incus/LXC
- **Container Name**: `www`
### LXC Container `www`
- **OS**: Linux distribution with Apache2 + PHP
- **Web Root**: `/var/www/localhost/` (mounted from host project directory)
- **Service**: `apache2.service` (running as systemd service)
- **Database**: SQLite (`collections.sqlite`)
- **PHP Version**: Compatible with Composer dependencies
### Network Setup
- **LXC Proxy**: Container port 80 → Host port 80
- **Access**: `http://localhost` on host serves the webapp
- **Internal**: Apache binds to `127.0.0.1:80` inside container
## Project Structure
```
/home/edwin/Documents/Projects/localweb/
├── src/ # PHP MVC source code
│ ├── Controllers/ # Route handlers
│ ├── Models/ # Data models
│ └── Services/ # Business logic
├── templates/ # Twig templates
├── public/ # Web root (entry point)
├── vendor/ # Composer dependencies
├── collections.sqlite # SQLite database
└── config.php # Configuration
```
## Development Workflow
### 1. Local Development
- Edit files in `/home/edwin/Documents/Projects/localweb/`
- Changes are immediately reflected in the container via shared mount
- Test via `curl localhost` or browser at `http://localhost`
### 2. Container Management
```bash
# Execute commands in container
incus exec www -- <command>
# Check Apache status
incus exec www -- systemctl status apache2
# View Apache logs
incus exec www -- tail -f /var/log/apache2/error.log
# Reload Apache
incus exec www -- systemctl reload apache2
# Check PHP version
incus exec www -- php -v
```
### 3. Database Operations
```bash
# Access database in container
incus exec www -- sqlite3 /var/www/localhost/collections.sqlite
# Check database permissions
incus exec www -- ls -la /var/www/localhost/collections.sqlite
```
## Application Details
### Technology Stack
- **PHP**: MVC application with PSR-4 autoloading
- **Framework**: Custom MVC with FastRoute routing
- **Templating**: Twig templates
- **Database**: SQLite with PDO
- **Frontend**: Bootstrap 5 + vanilla JavaScript (SPA-like)
- **Dependencies**: Managed via Composer
### Key Features
- **Collections Management**: CRUD operations for items
- **Categories**: Hierarchical category structure
- **QR Codes**: Automatic generation for items
- **Multi-language**: Dutch/English support
- **Search & Filter**: Dynamic content loading
### Routing
- **Web Routes**: Full page loads (`/`, `/categories`, `/parts`)
- **API Routes**: AJAX endpoints (`/api/items`, `/api/categories`)
- **Entry Point**: `public/index.php`
## Development Commands
### Dependencies
```bash
# Install/update dependencies
composer install
composer update
# Check for security issues
composer audit
```
### Testing
```bash
# Manual testing via curl
curl localhost
curl -s localhost | grep -i "collections"
# Test specific endpoints
curl localhost/api/items
curl localhost/api/categories
```
### Debugging
```bash
# Check Apache error logs
incus exec www -- tail -f /var/log/apache2/error.log
# Check access logs
incus exec www -- tail -f /var/log/apache2/access.log
# Verify file permissions
incus exec www -- ls -la /var/www/localhost/
```
## File Permissions
### Container Permissions
- **Project files**: `ubuntu:www-data` ownership
- **Database**: `ubuntu:ubuntu` ownership
- **Apache**: Runs as `www-data` user (group access)
### Common Issues
- Database permission errors: Check `collections.sqlite` ownership
- 403 errors: Verify file permissions in container
- 500 errors: Check Apache error logs
## Environment Variables & Configuration
### PHP Configuration
- Located in container PHP configuration
- Error reporting configured for development
- SQLite extension enabled
### Application Config
- `config.php`: Database path and constants
- `SUPPORTED_LOCALES`: ['en', 'nl'] for i18n
- `DB_PATH`: Points to SQLite database file
## Deployment Notes
### Container Persistence
- Data persists in container filesystem
- Database file stored in project directory
- No external database dependencies
### Backup Strategy
- Git repository for code
- SQLite database backup: `collections.sqlite.backup`
- Regular snapshots of LXC container recommended
## Troubleshooting
### Common Issues
1. **Apache not responding**: Check service status in container
2. **Database errors**: Verify SQLite file permissions
3. **404 errors**: Check `.htaccess` and routing configuration
4. **Permission denied**: Ensure `www-data` can read project files
### Recovery Commands
```bash
# Restart Apache
incus exec www -- systemctl restart apache2
# Fix permissions (if needed)
incus exec www -- chown -R ubuntu:www-data /var/www/localhost/
incus exec www -- chmod -R 755 /var/www/localhost/
# Check container status
incus list
incus info www
```
## Security Considerations
- Container isolation via LXC
- No direct database access from host
- Apache runs with limited privileges
- SQLite database in project directory (not web-exposed)
## Performance Notes
- Lightweight SQLite database
- Minimal PHP dependencies
- Efficient routing with FastRoute
- Client-side caching for static assets