# Production Workflow Guide This guide explains the actual workflow for Starting Line Productions LLC website with both technical and non-technical users. ## User Types ### Technical Users / AI Agents - **Access:** Local development environment (Docker port 5001) - **Method:** Direct markdown file editing via git - **Tools:** Text editor, git, Docker - **Example:** You (Charles), AI agents working on documentation ### Non-Technical Users - **Access:** Production server only (via Admin UI) - **Method:** Visual content editing through Grav Admin interface - **Tools:** Web browser - **Example:** Staff, business owner making content updates ## Workflow Diagram ``` ┌─────────────────────────────────────────────────────────────┐ │ Git Repository │ │ (git@knownelement.com/STLPWebsite.git) │ └────────────────────┬────────────────────────────────────────┘ │ ┌────────────┴────────────┐ │ │ ▼ ▼ ┌──────────────────┐ ┌─────────────────────────┐ │ Local Dev │ │ Production │ │ (Docker 5001) │ │ (Production URL) │ └──────────────────┘ └──────────┬──────────────────┘ │ ┌───────┴───────┐ │ │ ▼ ▼ ┌───────────┐ ┌───────────┐ │ Website │ │ Admin UI │ │ Pages │ │ Browser │ └───────────┘ └───────────┘ ``` ## Workflows ### Technical User Workflow (AI Agents, Charles) **Use this when:** Adding new equipment pages, area documentation, structural changes ```bash # 1. Work locally cd /home/charles/Projects/STLPWebsite docker compose up -d # 2. Make changes # Edit markdown files: config/www/user/pages/ # Test in browser: http://localhost:5001 # 3. Commit changes git add . git commit -m "feat(equipment): add CNC Lathe page" # 4. Push to git repository git push origin main # 5. Deploy to production # (SSH into production server) ssh user@production-server.com cd /var/www/grav git pull origin main rm -rf user/cache/* ``` **Flow:** Local Dev → Git Commit → Git Push → Production Pull ### Non-Technical User Workflow (Staff, Business Owner) **Use this when:** Updating existing content, changing text, minor edits ```bash # 1. Access production admin UI https://startinglineproductions.com/admin # 2. Login with admin credentials username: admin password: [your-password] # 3. Navigate to Pages # Find the page you want to edit # 4. Make changes using visual editor # Edit content directly in browser # Click "Save" # 5. Changes are immediately visible on production ``` **Flow:** Admin UI → Production Filesystem → Visible on Site ### Syncing Admin Changes to Git (Manual Process) **Use this when:** Non-technical users have made changes via Admin UI and those changes need to be preserved in git **Why this is needed:** - Admin UI saves changes directly to production filesystem - These changes are NOT in git repository - If production server is lost or restored from git, admin changes will be LOST - Technical user must periodically pull these changes and commit to git **When to run:** - After significant content updates via Admin UI - Before major deployments or server migrations - Weekly (recommended) as a backup procedure - After non-technical users report making important changes **Steps:** ```bash # 1. SSH into production server ssh user@production-server.com # 2. Check what has changed cd /var/www/grav git status # 3. Add all changed files (from admin edits) git add user/pages/ git add user/config/ # If admin changed config # 4. Review changes before committing git diff --staged # 5. Commit changes git commit -m "feat: update content via Admin UI - Updated [specific pages] - Changed [specific sections] - Modified by [staff member] via Admin" # 6. Push to git repository git push origin main ``` **Example Scenario:** ``` Day 1-5: Staff makes various content updates via Admin UI - Updates pricing on Resources page - Adds new project to Contact page - Changes phone number on Contact page - Edits equipment descriptions Day 6: Charles (technical user) syncs to git - SSH into production - Runs git status (shows 4 changed files) - Reviews changes - Commits: "feat: weekly content updates via Admin UI" - Pushes to git repository Result: All admin changes are now safely in git ``` ## Automated Sync (Optional Enhancement) If you want to automate the sync process, you can: ### Option 1: Cron Job (Simple) Run a script periodically to check for changes and commit them. **Production Server Crontab:** ```bash # Check for admin changes and commit (daily at 6 AM) 0 6 * * * /var/scripts/sync-admin-changes.sh ``` **Script: sync-admin-changes.sh** ```bash #!/bin/bash cd /var/www/grav # Check if there are uncommitted changes if [ -n "$(git status --porcelain)" ]; then # Add all changes git add -A # Create automatic commit git commit -m "chore: auto-commit admin UI changes Date: $(date) Changes detected in user/pages or user/config" # Push to git git push origin main echo "Admin changes synced to git" else echo "No changes detected" fi ``` **Pros:** Automatic, no manual intervention **Cons:** Commits everything without review, could commit mistakes ### Option 2: Manual Trigger (Recommended) Run sync only when you know changes were made. **Add to bash aliases:** ```bash # Add to ~/.bashrc alias sync-admin='ssh production-server.com /var/scripts/sync-admin.sh' ``` **Sync script: sync-admin.sh** ```bash #!/bin/bash cd /var/www/grav echo "Checking for Admin UI changes..." git status read -p "Do you want to commit and push these changes? (y/n): " answer if [ "$answer" == "y" ]; then git add -A echo "Enter commit message (Ctrl+C to cancel):" read message git commit -m "$message" git push origin main echo "Changes synced to git" else echo "Sync cancelled" fi ``` **Usage:** ```bash # After staff makes changes, run: sync-admin # Review changes, enter commit message, confirm ``` **Pros:** Human review before committing, safe **Cons:** Requires manual trigger ## Troubleshooting Sync Issues ### Issue 1: Git Conflicts **Problem:** Both technical user (local git) and non-technical user (admin UI) edited the same file. **Scenario:** 1. Charles adds new content to CNC Mill page locally 2. Commits and pushes to git 3. Staff edits same CNC Mill page via Admin UI 4. Charles tries to pull from production to sync changes 5. Git reports conflict **Solution:** ```bash # On production server cd /var/www/grav # Pull local changes (this will show conflict) git pull origin main # Open conflicted file vim user/pages/04.equipment/01.cnc/01.cnc-mill/default.md # Look for conflict markers: # <<<<<<< HEAD # Admin UI version # ======= # Git version # >>>>>>> origin/main # Manually resolve conflict (keep what you want) # Remove conflict markers # Save and exit # Add resolved file git add user/pages/04.equipment/01.cnc/01.cnc-mill/default.md # Commit resolution git commit -m "fix: resolve merge conflict in CNC Mill page - Merged admin UI changes with git changes - Kept both [specific content]" # Push resolution git push origin main ``` **Prevention:** - Communicate with staff before making major changes - Check git status on production before editing (if you're technical user) - Use different files when possible ### Issue 2: Admin Changes Not Persisting **Problem:** Staff makes changes via Admin UI but they disappear. **Possible Causes:** 1. **Cache Issue** ```bash # Clear cache on production ssh production-server.com cd /var/www/grav rm -rf user/cache/* ``` 2. **Permissions Issue** ```bash # Fix permissions chown -R www-data:www-data user/ find user -type d -exec chmod 775 {} \; find user -type f -exec chmod 664 {} \; ``` 3. **Plugin Conflict** ```bash # Check logs tail -50 user/logs/grav.log # Disable conflicting plugin (temporarily) mv user/plugins/problematic-plugin user/plugins/problematic-plugin.disabled ``` ### Issue 3: Git History Lost **Problem:** Admin UI changes are not being synced, git repository is outdated. **Consequence:** If production server crashes, all admin UI changes are lost. **Solution:** - Sync admin changes to git regularly (at least weekly) - Implement automated sync if frequent admin edits - Monitor git status on production ## Best Practices ### For Technical Users (You, AI Agents) 1. **Always test locally** before pushing to production 2. **Check production git status** before pulling (to see if admin made changes) 3. **Communicate** with staff when making structural changes 4. **Sync regularly** to capture admin UI changes 5. **Document** any manual interventions ### For Non-Technical Users (Staff) 1. **Use Admin UI** for content updates only (not structural changes) 2. **Report** any issues or errors immediately 3. **Notify** technical user when making significant content updates 4. **Understand** that Admin UI changes are not automatically backed up to git ### For Business Owner 1. **Technical User:** Handles all major updates, new pages, structural changes 2. **Staff Updates:** Content updates via Admin UI are synced periodically to git 3. **Weekly Backup:** Technical user syncs admin changes to git weekly 4. **Monthly Review:** Review what changes have been made via Admin UI ## Quick Reference ### Technical User Commands ```bash # Local development docker compose up -d docker exec stlp-grav rm -rf user/cache/* # Git workflow git add . git commit -m "message" git push origin main # Sync admin changes from production ssh production-server.com cd /var/www/grav git status # Check what changed git add user/pages/ # Add admin changes git commit -m "feat: sync admin changes" git push origin main # Deploy to production ssh production-server.com cd /var/www/grav git pull origin main rm -rf user/cache/* ``` ### Non-Technical User Actions ``` 1. Open browser 2. Go to: https://startinglineproductions.com/admin 3. Login 4. Navigate to Pages 5. Edit content 6. Click Save 7. Changes are live ``` ### Sync Frequency Recommendations | Activity | Frequency | Who | |----------|------------|-----| | Minor content updates (price changes, text edits) | Weekly | Technical user syncs | | Major content updates (new equipment, area changes) | Immediately after | Technical user syncs | | Emergency content updates | Immediately after | Technical user syncs | | Regular sync (backup) | Weekly (e.g., Monday 9 AM) | Automated or manual | ## Communication Protocol ### Before Making Changes **Technical User:** - Check: Are any staff actively using Admin UI? - Notify: "I'm updating X page, avoid editing it for 30 minutes" **Non-Technical User:** - Check: Is technical user making updates today? - Notify: "I'm updating X page via Admin UI" ### After Making Changes **Technical User:** - Notify: "I've updated X page, please review" - Sync: Pull from production if staff made changes **Non-Technical User:** - Notify: "I've updated X page via Admin UI, please sync to git" - Technical user performs sync ## Emergency Procedures ### Production Site Down **If production site crashes:** 1. **Quick Check:** ```bash ssh production-server.com cd /var/www/grav rm -rf user/cache/* ``` 2. **If still down:** Restore from git ```bash cd /var/www/grav git pull origin main rm -rf user/cache/* ``` 3. **If git has issue:** Restore from backup ```bash # Find most recent backup ls -lh /var/backups/grav/ # Restore tar -xzf /var/backups/grav/grav_backup_YYYYMMDD.tar.gz ``` ### Lost Admin UI Changes **If admin changes were not synced and server lost:** 1. **Check backups:** ```bash ls -lh /var/backups/grav/ ``` 2. **Restore from backup:** ```bash cd /var/www/grav tar -xzf /var/backups/grav/grav_backup_recent.tar.gz ``` 3. **Sync to git:** ```bash git add -A git commit -m "restore: restore from backup after server failure" git push origin main ``` ## Summary **Key Points:** - Technical users work in local dev (Docker), push to git, deploy to production - Non-technical users work in production Admin UI only - Admin UI changes are NOT in git - must be manually synced - Sync admin changes to git regularly (at least weekly) - Use communication to avoid conflicts - Implement automated sync if frequent admin edits **Critical Rule:** > Admin UI changes MUST be synced to git to prevent data loss > This is a manual process unless automated --- **For more details:** - See AGENTS.md for technical guidelines - See DEPLOYMENT.md for production deployment - See README.md for general project information