A professional cybersecurity portfolio website showcasing DevSecOps expertise, security operations experience, and GitHub Actions automation. This portfolio is built as a static site using pure HTML, CSS, and JavaScriptβperfect for deployment on GitHub Pages.
Live Demo: View Portfolio
This portfolio demonstrates:
- Professional Experience: Cyber Security Operations Engineer at Yamaha Motor Corporation
- Technical Skills: AWS, GitHub Actions, SIEM, EDR, DLP, Cloud Security, DevSecOps
- Security Automation: CI/CD pipelines with embedded security checks
- DevSecOps Practices: Secret scanning, code formatting, automated testing
This portfolio contains deliberate security vulnerabilities to demonstrate security scanning tools and DevSecOps practices. DO NOT use this code in production without addressing these issues.
-
π¦ Outdated Dependency (Dependabot Demo)
- Vulnerability: jQuery 3.4.1 with known CVEs
- Location: All HTML pages (
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>) - Purpose: Demonstrates GitHub Dependabot automated vulnerability detection
- Detection: GitHub will create automated PRs to update the dependency
-
π Reflected Cross-Site Scripting (XSS)
- Vulnerability: Contact form reflects unsanitized user input
- Location:
js/contact.js- usesinnerHTMLwithout sanitization - CWE: CWE-79 (Improper Neutralization of Input During Web Page Generation)
- Purpose: Demonstrates web vulnerability scanning and code analysis
- Exploit Example: Submit
<img src=x onerror=alert('XSS')>in the contact form - Fix: Use
textContentinstead ofinnerHTML, or sanitize with DOMPurify
-
π Hardcoded Secrets (TruffleHog Demo)
- Vulnerability: Fake AWS credentials and API keys in JavaScript comments
- Location:
js/main.js(lines 10-20, commented out) - Format: Realistic AWS key patterns (AKIA...), GitHub tokens (ghp_...)
- Purpose: Demonstrates secret scanning with TruffleHog
- Note: These are FAKE credentials for demonstration only
These intentional flaws serve as:
- Educational demonstrations of common security issues
- Test cases for security scanning tools (Dependabot, TruffleHog, CodeQL)
- Portfolio evidence of understanding security vulnerabilities and remediation
- Conversation starters in job interviews about security practices
- β Responsive Design: Mobile, tablet, and desktop optimized
- β Cybersecurity Theme: Dark mode with matrix green accents
- β Professional Content: Detailed experience, projects, and skills
- β Accessibility: Semantic HTML, ARIA labels, keyboard navigation
- β Performance: Optimized CSS, lazy loading, minimal JavaScript
- β SEO Friendly: Meta tags, semantic structure, clean URLs
- π Secret Scanning: Automated detection with TruffleHog
- β¨ Code Formatting: Prettier checks on pull requests
- π Link Checking: Automated broken link detection and reporting
- π GitHub Actions: Three production-ready CI/CD workflows
- π‘οΈ Security Integration: GitHub Advanced Security features
csulb-portfolio/
βββ index.html # Homepage with hero section and featured projects
βββ about.html # Professional experience and skills
βββ projects.html # Detailed project showcase
βββ contact.html # Contact form (with intentional XSS)
βββ devsecops.html # DevSecOps demonstrations and workflows
βββ 404.html # Custom error page
βββ css/
β βββ styles.css # Main stylesheet with cybersecurity theme
βββ js/
β βββ main.js # Core functionality (with hardcoded secrets)
β βββ contact.js # Contact form handler (with XSS vulnerability)
β βββ projects.js # Projects filtering logic
βββ .github/
β βββ workflows/
β βββ secret-scanning.yml # TruffleHog secret detection
β βββ code-formatting.yml # Prettier formatting checks
β βββ link-checker.yml # Broken link scanning
βββ .prettierrc # Prettier configuration
βββ .prettierignore # Prettier ignore patterns
βββ .gitignore # Git ignore patterns
βββ README.md # This file
- Git installed on your system
- GitHub account
- (Optional) Node.js 20+ for local development
-
Clone the Repository
git clone https://github.com/yourusername/csulb-portfolio.git cd csulb-portfolio -
Open in Browser
- Simply open
index.htmlin your web browser - Or use a local server:
# Using Python python -m http.server 8080 # Using Node.js http-server npx http-server . -p 8080 # Using VS Code Live Server extension # Right-click index.html β Open with Live Server
- Simply open
-
View the Site
- Navigate to
http://localhost:8080 - All pages should work with navigation
- Navigate to
Update the following files with your information:
-
Personal Information:
- Edit all HTML files to replace placeholder content
- Update social media links in footers
- Customize contact information
-
Projects:
- Modify
projects.htmlwith your actual projects - Add GitHub repository links
- Include screenshots or demos
- Modify
-
Styling (Optional):
- Adjust colors in
css/styles.css(:rootCSS variables) - Modify fonts and spacing as needed
- Adjust colors in
- Go to GitHub and sign in
- Click "New Repository"
- Name it:
csulb-portfolio(or your preferred name) - DO NOT initialize with README (we already have one)
- Click "Create repository"
# Initialize git (if not already done)
git init
# Add all files
git add .
# Commit
git commit -m "Initial commit: Cybersecurity portfolio site"
# Add remote (replace with your GitHub username)
git remote add origin https://github.com/yourusername/csulb-portfolio.git
# Push to GitHub
git branch -M main
git push -u origin main- Go to your repository on GitHub
- Click Settings (top right)
- Scroll to Pages section (left sidebar)
- Under Source, select:
- Branch:
main - Folder:
/ (root)
- Branch:
- Click Save
- Wait 2-3 minutes for deployment
- Your site will be live at:
https://yourusername.github.io/csulb-portfolio/
The three security workflows will automatically activate once code is pushed:
- Secret Scanning - Runs on every push and PR
- Code Formatting - Runs on pull requests
- Link Checker - Runs weekly on Mondays
No additional setup required! The workflows are already configured.
To fully utilize the security demonstrations:
- Go to Settings β Code security and analysis
- Enable:
- β Dependency graph
- β Dependabot alerts
- β Dependabot security updates
- β Code scanning (CodeQL)
- β Secret scanning
-
Dependabot Alerts: Security tab β Dependabot
- Will flag jQuery 3.4.1 vulnerability
- Automatically creates PRs to update
-
Code Scanning: Security tab β Code scanning
- Will detect the XSS vulnerability in contact form
- Shows security issues in code
-
Secret Scanning: Security tab β Secret scanning
- Will detect hardcoded secrets in
js/main.js - Alerts on exposed credentials
- Will detect hardcoded secrets in
- Actions Tab: View workflow runs
- Secret scanning results
- Code formatting reports
- Link checker reports
Create this file in the root directory for code formatting:
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"arrowParens": "avoid",
"endOfLine": "lf",
"bracketSpacing": true,
"htmlWhitespaceSensitivity": "css"
}node_modules
dist
build
coverage
.git
*.min.js
*.min.css
package-lock.json
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Build
dist/
build/
# Logs
logs/
*.log
# Environment
.env
.env.local
- Navigate to the Contact page
- Fill out the form with this in the "Name" field:
<img src=x onerror=alert('XSS')>
- Submit the form
- Expected: Alert popup appears (demonstrates XSS)
- In Production: This should be sanitized!
- Make a commit that adds a new fake secret:
const API_KEY = "AKIAIOSFODNN7EXAMPLE123";
- Push to GitHub
- Check Actions tab β Secret Scanning workflow
- Expected: TruffleHog detects the secret and fails the workflow
- Wait for Dependabot to scan dependencies (automatic)
- Check Security tab β Dependabot alerts
- Expected: Alert for jQuery 3.4.1 vulnerability
- Dependabot will create PR to update jQuery
-
Create a Branch
git checkout -b feature/update-projects
-
Make Changes
- Edit files
- Test locally
-
Commit Changes
git add . git commit -m "feat: add new project to portfolio"
-
Push and Create PR
git push origin feature/update-projects
- Go to GitHub and create Pull Request
- Workflows will run automatically
- Review security findings
-
Merge to Main
- Once approved, merge PR
- GitHub Pages will auto-deploy
# Format code with Prettier
npx prettier --write "**/*.{html,css,js}"
# Check formatting
npx prettier --check "**/*.{html,css,js}"
# Scan for secrets locally
trufflehog filesystem .
# Check links locally
npx linkinator http://localhost:8080 --recurse- HTML5 - Semantic markup
- CSS3 - Custom properties, Grid, Flexbox
- JavaScript (ES6+) - Vanilla JS, no frameworks
- jQuery 3.4.1 - Intentionally outdated for demo
- TruffleHog - Secret scanning
- Prettier - Code formatting
- Linkinator - Link checking
- GitHub Actions - CI/CD automation
- GitHub Advanced Security - Vulnerability scanning
- GitHub Pages - Static site hosting
- Git - Version control
This is a personal portfolio, but suggestions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
Note: Security workflows will run on your PR.
This project is licensed under the MIT License - see below:
MIT License
Copyright (c) 2025 [Your Name]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
This portfolio contains intentional security vulnerabilities for educational and demonstration purposes only.
The vulnerabilities included (outdated jQuery, XSS, hardcoded secrets) are designed to:
- Demonstrate knowledge of common security issues
- Showcase security scanning tools in action
- Provide talking points for job interviews
- Illustrate DevSecOps practices
DO NOT:
- Use this code in production environments
- Deploy without fixing the vulnerabilities
- Submit real credentials or sensitive data through the contact form
- Use these patterns in real applications
TO FIX FOR PRODUCTION:
- Update jQuery to latest version (3.7.1+)
- Sanitize all user input in contact form (use DOMPurify)
- Remove all hardcoded credentials
- Implement proper secrets management
- Add Content Security Policy headers
- Use environment variables for API keys
Email: [Your Email]
LinkedIn: [Your LinkedIn]
GitHub: [Your GitHub]
Portfolio: [Live Site URL]
- GitHub Actions Community - For excellent workflow examples
- TruffleHog by Truffle Security - Secret scanning tool
- Prettier - Code formatter
- Font Awesome - Icons (if used)
- GitHub Pages - Free hosting for static sites
- Pages: 5 (Home, About, Projects, DevSecOps, Contact)
- Lines of Code: ~3,500
- CSS Variables: 15+ for consistent theming
- GitHub Actions Workflows: 3
- Security Demonstrations: 3 intentional vulnerabilities
- Responsive Breakpoints: 3 (mobile, tablet, desktop)
Built with π» and π security in mind (and intentional vulnerabilities for demonstration)