Security & Privacy Configuration
Security & Privacy Configuration
Last Updated: 2025-12-10
This document explains what data is public vs private in this repository and GitHub Pages site.
π PRIVATE (Never Published)
Protected by .gitignore (Never in Git)
These files are never committed to GitHub:
- β
.env- API keys and secrets - β
data/raw_inputs/- Old resumes, performance reviews, source PDFs - β
data/resume_backup_*.json- Backup files - β
data/processed_files.json- Processing metadata - β
data/assessments/- Personality assessments (Myers-Briggs, FIRO-B) - β
__pycache__/,*.pyc- Python cache files
Status: β Not in repository, not accessible anywhere
In GitHub Repository (Public)
These files are in the public GitHub repo (visible to anyone) but are NOT published to GitHub Pages website:
- π
CLAUDE.md- Development guidelines for AI-assisted coding - π
AGENTS.md- Repository conventions and build commands - π
SECURITY.md- This security documentation - π
README.md- Repository documentation
Status: β οΈ Public on GitHub, but NOT on markschulz.me website
Note: These files contain technical documentation about the site architecture and development workflow. They do not contain sensitive data, passwords, or private information.
Protected by Jekyll exclude (In Git, But Not Published)
These files are in GitHub (public repo) but are NOT published to GitHub Pages:
- β
data/- Backend resume data and processing scripts - β
scripts/- Resume manager and Python utilities - β
docs/- Source documents and planning materials - β
output/- Generated resume exports - β
.venv/- Python virtual environment - β
*.py- All Python files
Status: β οΈ In public GitHub repo, but NOT on website
π PUBLIC (Published to Website)
Published by Jekyll to GitHub Pages
These files are visible on your public website (markschulz.me):
Main Site:
- π
index.md- Single-page homepage with embedded interactive resume - π
assets/- CSS, JavaScript, images
Quick Select Pre-Built Resumes:
- π
resume/brand-management.md- Brand Management static resume - π
resume/strategic-planning.md- Strategic Planning static resume - π
resume/cx-innovation.md- CX Innovation static resume
Data Files (Used by Interactive Resume):
- π
assets/data/resume.json- Curated resume data (400+ achievements, tagged and structured) - π
assets/data/resume_profiles.json- Profile filtering configuration
Status: β Publicly accessible (intended)
Note: The interactive resume tool is embedded in index.md and uses JavaScript to filter assets/data/resume.json in real-time based on user selections. The Quick Select links take users to pre-built static resume pages. The backend version in data/ (with raw processing scripts) is excluded from the website.
π― How Data is Used
Backend Data (data/resume.json)
- Location: Excluded from Jekyll (private)
- Used by: Python extraction scripts and resume generators
- Contains: Full career history including all extracted achievements
- Accessible: Only in private GitHub repo (if repo is private)
- Published: β NEVER published to website
Public Data (assets/data/resume.json)
- Location: Published to website
- Used by: Interactive resume JavaScript
- Contains: Professional achievements you want to showcase
- Accessible: β Public on your website
- Published: β Anyone can view at https://yoursite.com/assets/data/resume.json
Data Sync Workflow
When you want to update the public resume with new achievements:
# After running batch processor and reviewing data/resume.json:
cp data/resume.json assets/data/resume.json
cp data/resume_profiles.json assets/data/resume_profiles.json
# Commit and push
git add assets/data/
git commit -m "Update public resume data"
git push
You control when the public data is updated!
Interactive Resume (resume-interactive.html)
- Location: Published to website
- Fetches data from:
assets/data/resume.jsonat runtime - Privacy: Shows only whatβs in
assets/data/resume.json - Filtering: Uses tags from
assets/data/resume_profiles.jsonto filter by role
π Verification Steps
1. Check whatβs in Git:
git ls-files | grep -E "(data|scripts|docs)"
2. Check whatβs excluded from Jekyll:
grep -A 20 "^exclude:" _config.yml
3. Check whatβs gitignored:
cat .gitignore
4. Verify website build doesnβt include sensitive data:
bundle exec jekyll build
ls -la _site/data/ # Should return "No such file or directory"
ls -la _site/scripts/ # Should return "No such file or directory"
β οΈ Important Notes
GitHub Repository Visibility
- Current: Private repository
- When public: Only files not in
.gitignorewill be visible - Recommendation: Keep repo private OR audit all committed files before making public
GitHub Pages
- Publishes from:
_site/directory (Jekyll build output) - Excludes: Everything in Jekyllβs
excludelist - Safety: Even if repo is public, excluded files wonβt be on the website
Data Workflow
Source Docs (raw_inputs/)
β [gitignored - never in Git]
Python Scripts Process
β [in Git but excluded from Jekyll]
data/resume.json Updated
β [in Git but excluded from Jekyll]
Manual Curation
β
resume-interactive.html
β [published to website]
Public Website
π‘οΈ Security Checklist
Before making repository public:
- Verify
.envis gitignored - Verify
data/raw_inputs/is gitignored - Check
git logfor any accidentally committed secrets - Review all committed files:
git ls-files - Build Jekyll site and verify
_site/doesnβt contain sensitive data - Test GitHub Pages preview before going live
Before publishing to GitHub Pages:
- Review
_config.ymlexclude list - Build site locally:
bundle exec jekyll serve - Check
_site/directory for any sensitive files - Verify interactive resume only shows intended data
- Test all public pages in incognito browser
π If You Find Exposed Data
If you discover sensitive data is accessible:
- Immediate: Take site offline (disable GitHub Pages in repo settings)
- Fix: Add files to
excludein_config.yml - Verify: Rebuild and check
_site/directory - Republish: Re-enable GitHub Pages
- Audit: Review commit history for leaked secrets
π Summary
TRULY PRIVATE (Never in Git):
- β
API keys (
.env) - β
Source documents (
data/raw_inputs/) - β Personal assessments
- β Backup files
IN PUBLIC GITHUB REPO (But Not on Website):
- β οΈ Development documentation (
CLAUDE.md,AGENTS.md,SECURITY.md) - β οΈ Backend data (
data/resume.json, Python scripts) - β οΈ Repository guidelines and architecture docs
PUBLIC ON WEBSITE (markschulz.me):
- β Website pages and blog posts
- β Portfolio case studies
- β
Interactive resume (
assets/data/resume.json- curated data only) - β CSS, JavaScript, images
Protection layers:
.gitignore- keeps sensitive files (API keys, source docs) out of Git entirely- Jekyll
exclude- keeps backend files out of published website - Public repo - development files visible on GitHub but not on your site
- Manual curation - you control what goes in the public interactive resume
Bottom line:
- Your source documents, API keys, and assessments are never in Git
- Your backend development files are in the public GitHub repo (technical docs only)
- Only curated resume data appears on markschulz.me
- No sensitive personal information is publicly accessible