update
|
|
@ -0,0 +1,52 @@
|
|||
# ── HTTPS Redirect ──────────────────────────────────────────────────────────
|
||||
RewriteEngine On
|
||||
RewriteCond %{HTTPS} off
|
||||
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
|
||||
# ── Security Headers ─────────────────────────────────────────────────────────
|
||||
# HSTS: tell browsers to always use HTTPS (1 year). Add "; preload" and submit
|
||||
# to https://hstspreload.org once you're confident HTTPS is permanent.
|
||||
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
||||
|
||||
# Prevent MIME-type sniffing
|
||||
Header always set X-Content-Type-Options "nosniff"
|
||||
|
||||
# Block this site from being embedded in iframes
|
||||
Header always set X-Frame-Options "DENY"
|
||||
|
||||
# Control how much referrer info is sent to external sites
|
||||
Header always set Referrer-Policy "strict-origin-when-cross-origin"
|
||||
|
||||
# Disable browser features not used by this site
|
||||
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), interest-cohort=()"
|
||||
|
||||
# Prevent cross-origin window attacks
|
||||
Header always set Cross-Origin-Opener-Policy "same-origin"
|
||||
|
||||
# Restrict cross-origin resource loading
|
||||
Header always set Cross-Origin-Resource-Policy "same-origin"
|
||||
|
||||
# Content Security Policy
|
||||
# - script/style 'unsafe-inline' required for inline blocks in both pages
|
||||
# - fonts.googleapis.com for Google Fonts CSS; fonts.gstatic.com for font files
|
||||
# - ki5bhv.com for the profile photo
|
||||
Header always set Content-Security-Policy "default-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' https://ki5bhv.com data:; connect-src 'none'; frame-src 'none'; object-src 'none'; base-uri 'self'; form-action 'none'; upgrade-insecure-requests"
|
||||
|
||||
# ── Strip Server Info ─────────────────────────────────────────────────────────
|
||||
Header always unset X-Powered-By
|
||||
Header always unset Server
|
||||
|
||||
# ── security.txt: also serve from /.well-known/ per RFC 9116 ─────────────────
|
||||
RedirectMatch 301 ^/.well-known/security.txt$ /security.txt
|
||||
|
||||
# ── Sitemap ───────────────────────────────────────────────────────────────────
|
||||
# Declared here so crawlers that read robots.txt can find it
|
||||
# (also declared in robots.txt if you add one)
|
||||
|
||||
# ── Disable directory listing ─────────────────────────────────────────────────
|
||||
Options -Indexes
|
||||
|
||||
# ── Protect dotfiles ──────────────────────────────────────────────────────────
|
||||
<FilesMatch "^\.">
|
||||
Require all denied
|
||||
</FilesMatch>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"CurrentProjectSetting": null
|
||||
}
|
||||
|
|
@ -1,68 +1,68 @@
|
|||
# k5bss.com
|
||||
|
||||
Personal portfolio and ham radio station site for Justin Frasier — IT Support Analyst and amateur radio operator (K5BSS, General Class).
|
||||
|
||||
Live at: [k5bss.com](https://k5bss.com)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Two static pages with a dark terminal aesthetic. No frameworks or build tools — just HTML, CSS, and vanilla JavaScript.
|
||||
|
||||
- **[index.html](index.html)** — Resume/portfolio page
|
||||
- **[k5bss.html](k5bss.html)** — Ham radio station dashboard and logbook
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
k5bss.com/
|
||||
├── index.html # Resume/portfolio page
|
||||
├── k5bss.html # Ham radio station dashboard
|
||||
├── Justin_Frasier_Resume.pdf # Downloadable resume
|
||||
├── css/
|
||||
│ └── style.css # Styles for index.html
|
||||
├── favicon.ico
|
||||
├── favicon-32x32.png
|
||||
├── favicon-64x64.png
|
||||
└── favicon-256x256.png
|
||||
```
|
||||
|
||||
## Pages
|
||||
|
||||
### Resume / Portfolio (`index.html`)
|
||||
|
||||
- **About** — summary, tags, and certifications at a glance
|
||||
- **Experience** — work history (Margaritaville, Boomtown, xententLABS)
|
||||
- **Technical Skills** — languages, OS, hardware, tools, networking, IT support, security
|
||||
- **Education** — BPCC A.A.S. Cyber Technology, Northwood High School
|
||||
- **Certifications** — CompTIA A+, PCPro, Udemy courses, amateur radio, locomotive
|
||||
- **Contact** — email, phone, address, GitHub, LinkedIn, self-hosted Git
|
||||
|
||||
Fonts: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [IBM Plex Sans](https://fonts.google.com/specimen/IBM+Plex+Sans) via Google Fonts. Sticky sidebar with scroll-spy nav via `IntersectionObserver`.
|
||||
|
||||
### Ham Radio Station Dashboard (`k5bss.html`)
|
||||
|
||||
Three-tab single-page app for station stats and the contact logbook:
|
||||
|
||||
- **Dashboard** — QSO count, DXCC entities, states worked; bar charts for modes and bands; top countries list; monthly QSO activity canvas chart
|
||||
- **Logbook** — searchable, filterable, paginated contact log (callsign, name, country, QTH, LoTW status)
|
||||
- **About** — station info and operating preferences
|
||||
|
||||
Fonts: [Share Tech Mono](https://fonts.google.com/specimen/Share+Tech+Mono), [Orbitron](https://fonts.google.com/specimen/Orbitron), and [Barlow](https://fonts.google.com/specimen/Barlow) via Google Fonts. Styles and JavaScript are self-contained within the file.
|
||||
|
||||
## Responsive Design
|
||||
|
||||
`index.html` adapts across three breakpoints defined in `css/style.css`:
|
||||
|
||||
| Breakpoint | Behavior |
|
||||
|---|---|
|
||||
| `≤1024px` (tablet) | Sidebar narrows from 280px to 230px; main content padding reduced |
|
||||
| `≤768px` (mobile) | Sidebar unsticks and stacks above content; nav links reflow into a horizontal wrapping row; contact grid collapses to one column |
|
||||
| `≤480px` (small phone) | Tighter padding and font sizes; skills grid columns shrink to `minmax(140px, 1fr)` |
|
||||
|
||||
All other components — tags, socials, and the skills grid — use `flex-wrap` or `auto-fill` and reflow fluidly without breakpoints.
|
||||
|
||||
## Deployment
|
||||
|
||||
Static files — drop the repo contents onto any web server or host (Nginx, Apache, Caddy, GitHub Pages, etc.). No build step required.
|
||||
# k5bss.com
|
||||
|
||||
Personal portfolio and ham radio station site for Justin Frasier — IT Support Analyst and amateur radio operator (K5BSS, General Class).
|
||||
|
||||
Live at: [k5bss.com](https://k5bss.com)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Two static pages with a dark terminal aesthetic. No frameworks or build tools — just HTML, CSS, and vanilla JavaScript.
|
||||
|
||||
- **[index.html](index.html)** — Resume/portfolio page
|
||||
- **[k5bss.html](k5bss.html)** — Ham radio station dashboard and logbook
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
k5bss.com/
|
||||
├── index.html # Resume/portfolio page
|
||||
├── k5bss.html # Ham radio station dashboard
|
||||
├── Justin_Frasier_Resume.pdf # Downloadable resume
|
||||
├── css/
|
||||
│ └── style.css # Styles for index.html
|
||||
├── favicon.ico
|
||||
├── favicon-32x32.png
|
||||
├── favicon-64x64.png
|
||||
└── favicon-256x256.png
|
||||
```
|
||||
|
||||
## Pages
|
||||
|
||||
### Resume / Portfolio (`index.html`)
|
||||
|
||||
- **About** — summary, tags, and certifications at a glance
|
||||
- **Experience** — work history (Margaritaville, Boomtown, xententLABS)
|
||||
- **Technical Skills** — languages, OS, hardware, tools, networking, IT support, security
|
||||
- **Education** — BPCC A.A.S. Cyber Technology, Northwood High School
|
||||
- **Certifications** — CompTIA A+, PCPro, Udemy courses, amateur radio, locomotive
|
||||
- **Contact** — email, phone, address, GitHub, LinkedIn, self-hosted Git
|
||||
|
||||
Fonts: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [IBM Plex Sans](https://fonts.google.com/specimen/IBM+Plex+Sans) via Google Fonts. Sticky sidebar with scroll-spy nav via `IntersectionObserver`.
|
||||
|
||||
### Ham Radio Station Dashboard (`k5bss.html`)
|
||||
|
||||
Three-tab single-page app for station stats and the contact logbook:
|
||||
|
||||
- **Dashboard** — QSO count, DXCC entities, states worked; bar charts for modes and bands; top countries list; monthly QSO activity canvas chart
|
||||
- **Logbook** — searchable, filterable, paginated contact log (callsign, name, country, QTH, LoTW status)
|
||||
- **About** — station info and operating preferences
|
||||
|
||||
Fonts: [Share Tech Mono](https://fonts.google.com/specimen/Share+Tech+Mono), [Orbitron](https://fonts.google.com/specimen/Orbitron), and [Barlow](https://fonts.google.com/specimen/Barlow) via Google Fonts. Styles and JavaScript are self-contained within the file.
|
||||
|
||||
## Responsive Design
|
||||
|
||||
`index.html` adapts across three breakpoints defined in `css/style.css`:
|
||||
|
||||
| Breakpoint | Behavior |
|
||||
|---|---|
|
||||
| `≤1024px` (tablet) | Sidebar narrows from 280px to 230px; main content padding reduced |
|
||||
| `≤768px` (mobile) | Sidebar unsticks and stacks above content; nav links reflow into a horizontal wrapping row; contact grid collapses to one column |
|
||||
| `≤480px` (small phone) | Tighter padding and font sizes; skills grid columns shrink to `minmax(140px, 1fr)` |
|
||||
|
||||
All other components — tags, socials, and the skills grid — use `flex-wrap` or `auto-fill` and reflow fluidly without breakpoints.
|
||||
|
||||
## Deployment
|
||||
|
||||
Static files — drop the repo contents onto any web server or host (Nginx, Apache, Caddy, GitHub Pages, etc.). No build step required.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 473 B After Width: | Height: | Size: 473 B |
|
Before Width: | Height: | Size: 826 B After Width: | Height: | Size: 826 B |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
|
@ -0,0 +1,29 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
#Generated by https://github.com/gitaware/securitytxtgenerator
|
||||
|
||||
# If you would like to report a security issue, please contact us at:
|
||||
Contact: justin@k5bss.com
|
||||
Expires: 2027-04-20T01:14:00Z
|
||||
Preferred-Languages: en
|
||||
Canonical: https://k5bss.com/security.txt
|
||||
Encryption: https://k5bss.com/pgp-key.asc
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
wsFzBAEBCAAnBYJp5onuCZB2Xap8YgdeNhYhBK0QLg9LuG9EuLvfkHZdqnxi
|
||||
B142AAAlIw//Y//VEh32G+tXnamBIuYq4W+vdBlwZuKGeW/IwObedw89bGwo
|
||||
/xSPGWUh0mPKKLof1MtLWNObUUCBscRZiLArExFzw/OZy2J3VuAH5qBrl2am
|
||||
D8dnl/6CbqdrpEI3cinrzgDoa1Z4F15wF5lLNlvYHCGkXFIpNFsd8H6P9/UZ
|
||||
v0jM6l93wDWbEZR1rHIxvtoUQd8gfPwksGa+osj6QkpP7XBRRly6nAihk8u7
|
||||
r+aZ1Sh+YfWiVH966mxmV0x9N2ihYgYmwPMPUNCSRgpDZgM3EEKZWHryuPu2
|
||||
Sp5q3bxa6BahAEXFhYaJKinkL5O95vaxiJcsaqPRhlR2xHXLoQj9Ot5v5E9c
|
||||
uUc2P0v4M/VLFFTWwnu+3z72V/sj32biRJ70hvH/bb58oOm7YAcOCERyFsY+
|
||||
4Drcnt2Am7QDEojhdg3GYf9pJs0tsyvmTZsmpYN8pv3lfzUzEW2YUOdWjMOf
|
||||
nLmeqipVA0tSC3QhK3EMqbgtNpJqR/TpbfyWd9EFLS/Jc/kCkAbJlSDOi9ud
|
||||
FkbnWBMiTtSPOiDwWMswbOdMTwHu+GxnAbB5+lQghxuEOTTmOPvEQ6DtYhpn
|
||||
3+YIf0oDqeptjd+VE5Tx59CMV1RsZkbTVRJanBuLp339Kb/dfQi/G7mIkRne
|
||||
hxUZ/Nx9LjsFxlcJRLnAnmtr5qfHeamo7ME=
|
||||
=o+Va
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
|
||||
<url>
|
||||
<loc>https://k5bss.com/</loc>
|
||||
<lastmod>2026-04-20</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://k5bss.com/k5bss.html</loc>
|
||||
<lastmod>2026-04-20</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
|
||||
</urlset>
|
||||