joshbotz/your-security-portfolio

GitHub: joshbotz/your-security-portfolio

Stars: 0 | Forks: 0

# Security Portfolio Template **[→ Use this template](https://github.com/joshbotz/your-security-portfolio/generate)** to create your own copy on GitHub. **[→ PORTFOLIO-GUIDE.md](PORTFOLIO-GUIDE.md)** — full walkthrough: get your copy → personalize → add projects → deploy → share. This template helps you: - present your background and technical approach clearly - showcase projects, labs, and technical writeups - make it easier for employers, peers, and recruiters to understand your work - launch an MVP portfolio fast, then improve it over time ## Who This Is For Cloud security professionals who want to showcase: - AWS and cloud security projects - detection and security tooling work - architecture notes and technical writeups - implementation-focused labs - practical security documentation ## See It In 60 Seconds No setup required — just open `index.html` in your browser to preview the template immediately. Or use a local server: npx serve . # or: python3 -m http.server ## Start Here 5 fields to a publish-ready portfolio: 1. Clone this template to your own GitHub account. 2. Open `assets/js/config.js`. 3. Update the **5 required fields** at the top: first name, last name, role title, email, resume URL. 4. Replace `assets/img/headshot.png` with your own photo. 5. Open `setup.html` in your browser to verify everything is set. 6. Deploy when ready. That's it. Everything else is pre-filled and works out of the box. ## File Structure YOUR-SECURITY-PORTFOLIO/ ├── assets/ │ ├── css/ │ │ └── style.css │ ├── img/ │ │ ├── favicon.svg │ │ ├── headshot.png │ │ └── og-image.png │ └── js/ │ ├── config.js ← Edit this (5 required fields + optional settings) │ ├── content.js ← Optional deeper page content │ └── main.js ← Binding engine (don't edit) ├── docs/ │ ├── architecture-notes.md │ ├── student-notes.md │ └── troubleshooting.md ├── projects/ │ ├── portfolio-platform.html │ └── project-template.html ├── scripts/ │ ├── deploy-site.sh │ └── validate.sh ├── site/ │ ├── main.tf │ ├── headers.tf │ ├── domain.tf │ ├── outputs.tf │ ├── variables.tf │ └── terraform.tfvars.example ├── .github/ │ └── workflows/ │ └── deploy.yml ├── setup.html ← Setup checklist (open locally to verify config) ├── 404.html ├── about.html ├── contact.html ├── index.html ├── projects.html └── README.md ## How Config Works The template uses three JavaScript files loaded in order: ### config.js — Edit this first The **5 required fields** are at the very top. Below that: optional links (LinkedIn, GitHub, scheduling), skills/certifications, FAQ, "Currently Building" items, and all the pre-filled starter copy. You can ignore everything below the required fields for your first deploy. ### content.js — Optional, pre-filled Deeper content for About, Projects, Contact, and project detail pages. Works out of the box. Delete this file and the site still works. ### main.js — Don't edit Binding engine that connects config to the page. Renders FAQ, skills, "Currently Building", and handles social meta tags automatically. ## Current Pages - `index.html` — Homepage with featured project, focus areas, "What I'm Working On", and FAQ - `projects.html` — Project portfolio hub - `about.html` — Background, approach, direction, skills & certifications - `contact.html` — Ways to connect (email, scheduling, LinkedIn, GitHub) + FAQ - `404.html` — Custom not found page - `projects/portfolio-platform.html` — Featured project detail - `projects/project-template.html` — Starter template for new projects ## Key Features ### Scheduling Link Set `schedulingUrl` in config.js to your Calendly, Cal.com, or booking link. A "Book a Call" card appears on the contact page automatically. Leave it blank to hide it. Great for removing friction during job searches — recruiters can book time directly. ### Skills & Certifications Add your skills and certs to the `skills` and `certifications` arrays in config.js. They render as tags on the About page sidebar. Set either to `[]` to hide. ### FAQ Section Config-driven accordion on homepage and contact page. Update questions and answers in config.js. ### "What I'm Working On" A simple list on the homepage showing what you're currently building. Update `currentlyBuilding` in config.js. Set to `[]` to hide. ### Social Sharing (OG Tags) Open Graph and Twitter Card meta tags on every page. Set `siteUrl` in config.js after deploy for proper LinkedIn previews. Replace `assets/img/og-image.png` with a custom image (1200x630px recommended). ### Last Updated Set `lastUpdated` in config.js (e.g., `"March 2026"`) to show a timestamp in the footer. Signals to visitors that the portfolio is actively maintained. ### Print Stylesheet The site includes a print-friendly stylesheet. Recruiters can print or save-as-PDF with clean formatting — dark backgrounds are removed, navigation is hidden, and content is optimized for paper. ### Setup Checklist Open `setup.html` in your browser to see a live dashboard of your config status — green checks for fields that are set, red X's for placeholders still remaining. ### Setup Validator Run `bash scripts/validate.sh` before deploying to catch missing fields. The deploy script runs this automatically. ### Security Headers CloudFront response headers policy adds HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, and CSP. ### Custom Domain (Optional) Set `domain_name` and `hosted_zone_id` in your `terraform.tfvars` to add a custom domain with ACM certificate and Route 53 DNS. ### CI/CD Deploy GitHub Actions workflow at `.github/workflows/deploy.yml` deploys on push to main. Requires GitHub secrets for AWS OIDC role, region, bucket, and CloudFront ID. ## How To Add A New Project 1. Copy the template: cp projects/project-template.html projects/your-project-name.html 2. Replace all `[BRACKETED]` placeholder text. Search for `[` to find them. 3. Add a project card to `projects.html` — the template includes the exact HTML to copy in its comments. 4. Preview locally, then deploy. ## Images and Branding Replace these files with your own: ## Deployment ### First-time setup aws --version terraform version aws configure aws sts get-caller-identity cd site cp terraform.tfvars.example terraform.tfvars # Create your local config # Edit terraform.tfvars with your bucket name, region, etc. terraform init terraform validate terraform plan terraform apply terraform output cd .. bash scripts/deploy-site.sh ### Normal content updates bash scripts/deploy-site.sh ### Infrastructure updates cd site terraform plan terraform apply cd .. bash scripts/deploy-site.sh ## Teardown cd site aws s3 rm s3://YOUR_BUCKET_NAME --recursive terraform destroy ## Security Notes - Private S3 origin with CloudFront-only access - HTTPS delivery enforced - Encryption at rest (AES256) - Versioning enabled - Security response headers (HSTS, CSP, X-Frame-Options) - Infrastructure as code with Terraform - Low attack surface through static site architecture ### Important: Keep Secrets Out of Your Public Repo If you fork this template to a **public** GitHub repository, never commit: - **API keys or tokens** of any kind — do not put them in JavaScript files, HTML, or config - **`terraform.tfvars`** — this file is `.gitignore`d by default; use `terraform.tfvars.example` as your reference and create a local copy - **`.env` files** — environment variables stay local - **Private keys** (`.pem`, `.key`) — never commit these The `.gitignore` in this template is pre-configured to block these files, but always double-check before pushing. If you accidentally commit a secret, rotating the credential is the only safe fix — removing the file from future commits does not erase it from git history.
标签:后端开发