resume_page

Log | Files | Refs | README

README.md (4966B)


      1 # Start the container
      2 
      3 Install Docker with Docker Compose v2.23.0 or newer. From this directory, run:
      4 
      5 ```sh
      6 docker compose up -d
      7 ```
      8 
      9 Open <http://localhost:8000>.
     10 
     11 To start with automatic application updates during development, run:
     12 
     13 ```sh
     14 docker compose watch
     15 ```
     16 
     17 # Git frontend
     18 
     19 Add one public HTTPS clone URL per line to `stagit/repos.txt`. Repository names
     20 must be unique. Run `docker compose up -d --build`, then open <http://localhost>.
     21 The same pages are served at <https://git.lindholmlabs.com> in production.
     22 
     23 The stagit container clones or fetches immediately, generates static pages, then
     24 sleeps for 24 hours. Restart it with `docker compose restart stagit` to sync now.
     25 Mirrors and generated pages persist in named volumes. Unavailable remotes keep
     26 their last local copy; removing a URL does not delete its mirror. Caddy serves the
     27 completed output read-only; stagit exposes no ports.
     28 
     29 The Git pages use local copies of Codemadness's
     30 [stylesheet](https://codemadness.org/git/style.css),
     31 [favicon](https://codemadness.org/git/favicon.png), and
     32 [logo](https://codemadness.org/git/logo.png).
     33 
     34 # Software Requirements Specification
     35 
     36 ## Personal Résumé Website
     37 
     38 ### 1. Intent
     39 
     40 Build a permanent, lightweight résumé website for a software developer.
     41 
     42 Treat the site as a document published on the Web, not as a web application.
     43 
     44 ### 2. Application
     45 
     46 **REQ-01 — Runtime**\
     47 Use Python and Flask. Keep all Flask logic in `cv/main.py`.
     48 
     49 **REQ-02 — Page**\
     50 The application shall contain exactly one page. Serve the résumé at `/`. Keep HTML in `cv/index.html` and CSS in `cv/style.css`.
     51 
     52 **REQ-03 — JavaScript**\
     53 Do not use JavaScript.
     54 
     55 ### 3. Project Layout
     56 
     57 **REQ-04 — Files**\
     58 Use this structure:
     59 ```
     60 /
     61 ├── .gitignore
     62 ├── .gitattributes
     63 ├── README.md
     64 ├── compose.yml
     65 ├── caddy/
     66 │   └── Caddyfile
     67 ├── stagit/
     68 │   ├── Dockerfile
     69 │   ├── sync.sh
     70 │   ├── repos.txt
     71 │   ├── style.css
     72 │   ├── favicon.png
     73 │   └── logo.png
     74 └── cv/
     75     ├── main.py
     76     ├── Dockerfile
     77     ├── requirements.txt
     78     ├── index.html
     79     ├── robots.txt
     80     ├── sitemap.xml
     81     └── style.css
     82 ```
     83 
     84 Do not add directories.
     85 
     86 **REQ-05 — README**\
     87 The README shall contain only:
     88 
     89 1. Instructions to start the container.
     90 2. Git frontend instructions.
     91 3. This SRS.
     92 
     93 Place the start instructions first.
     94 
     95 ### 4. Container
     96 
     97 **REQ-06 — Operation**\
     98 Package the application with Docker. `docker compose up -d` shall start the site. Restarting the container shall restore normal operation.
     99 
    100 **REQ-07 — Compose Watch**\
    101 Configure `develop.watch` in `compose.yml`. `docker compose watch` shall detect changes to application files and update or rebuild the service as required.
    102 
    103 **REQ-08 — Runtime Dependencies**\
    104 Do not require external CDNs, hosted fonts, analytics, databases, build systems, JavaScript packages, or third-party runtime services.
    105 
    106 ### 5. Visual Design
    107 
    108 **REQ-09 — Direction**\
    109 Use the visual restraint of long-lived FOSS and Unix websites. Suitable references include CRUX Linux, kernel.org, OpenBSD, NetBSD, suckless.org, SQLite, musl libc, BusyBox, Alpine Linux, and SourceHut. Do not copy a reference site.
    110 
    111 Do not imitate a terminal. Do not use fake prompts, simulated commands, or monospace text as decoration.
    112 
    113 **REQ-10 — Palette**\
    114 Use this palette:
    115 ```less
    116 Accent blue      #007acc
    117 Light highlight  #d4d4d4
    118 Primary text     #333333
    119 Dark highlight   #252525
    120 Dark background  #1e1e1e
    121 ```
    122 
    123 Declare colors as custom properties in `:root`. Reference those properties throughout the stylesheet. Use accent blue mainly for links and small accents.
    124 
    125 **REQ-11 — Typography**\
    126 Use system or web-safe fonts only. Declare each font stack once as a custom property in `:root`.
    127 
    128 **REQ-12 — Style**\
    129 Use typography, spacing, and hierarchy to structure the page. Avoid gradients, shadows, glass effects, animation, oversized hero sections, card grids, carousels, and decorative image galleries.
    130 
    131 ### 6. Content and Layout
    132 
    133 **REQ-13 — Sections**\
    134 Include:
    135 
    136 - Introduction
    137 - Work experience
    138 - Education
    139 - Selected projects
    140 - Technical skills
    141 - Contact and external links
    142 
    143 Present experience and projects as concise text with ordinary links.
    144 
    145 **REQ-14 — Responsive Layout**\
    146 Use a restrained maximum width on large displays. Use one readable column on small displays. Require no JavaScript for responsive behavior.
    147 
    148 ### 7. Document Quality
    149 
    150 **REQ-15 — HTML**\
    151 Use semantic HTML5 and a logical heading order. The document shall remain readable without CSS.
    152 
    153 **REQ-16 — CSS**\
    154 Keep the stylesheet small and conventional. Prefer standard layout methods over frameworks or design-system abstractions.
    155 
    156 **REQ-17 — Priorities**\
    157 Prioritize, in order:
    158 
    159 1. Maintainability
    160 2. Accessibility
    161 3. Readability
    162 4. Browser compatibility
    163 5. Load time
    164 6. Visual character
    165 
    166 When several solutions meet a requirement, use the simplest one.