Getting you an CV (ANSI-v?) straight to your terminal.
Be warned though, this is entirely useless:
-
Create a resume according to the JSON Resume Schema (schema specification) either:
- manually,
- exporting from LinkedIn using Joshua Tzucker's LinkedIn exporter (repo), or
- exporting from one of the platforms advertised as offering JSON resume integration:
-
Create a gist named
resume.json
with those resume contents. See here for a working example from a JSON Resume co-founder. -
Try it out!
curl -L ancv.io/username
This being a hobby project, new (and old) features were tried out and used:
- fully async using
aiohttp
and gidgethub structural pattern matching, introduced in Python 3.10Not used since unsupported by AWS lambda (2022-07-16)- fully typed using Python type hints, verified through
mypy --strict
(with additional, even stricter settings) - structural logging with a JSON event stream output
pydantic
for fully typed data validation (e.g., for APIs), facilitated by automaticpydantic
model generation from e.g. OpenAPI specs like GitHub's or JSON Resume's, allowing full support frommypy
and the IDE when using said validated data- 12 Factor App conformance:
- Codebase: GitHub-hosted repo
- Dependencies: taken care of by poetry and its standardized (PEP 621) config and lock files, pinning all transient dependencies and providing virtual environments
- Config: the app is configured using environment variables. Although problematic, this approach was chosen for its simplicity
- Backing Services: not applicable for this very simple app
- Build, release, run: handled through GitHub releases via git tags
- Processes: this simple app is stateless in and of itself
- Port binding: the
aiohttp
server part of the app acts as a standalone web server, exposing a port. That port can then be serviced by any arbitrary reverse proxy - Concurrency: covered by async functionality (in a single process and thread). This being a stateless app, horizontal scaling through additional processes is trivial (e.g. via serverless hosting), although vertical scaling will likely suffice indefinitely
- Disposability:
aiohttp
handlesSIGTERM
gracefully - Dev/prod parity: trivial to do for this simple app. If running on Windows, mind this issue. If running on Linux, no special precautions are necessary
- Logs: structural JSON logs are written directly to
stdout
- Admin processes: not applicable either
(put this as an SVG flowchart, left to right with conceptual sketches)
Skeleton + Theme + Language + ASCII-mode toggle + Resume Data ==> terminal CV
Set up your environment:
- Install
poetry
- Run
poetry install
- Enter into the created environment with
poetry shell
- Set up
git
hooks provided bypre-commit
:make hooks
Very hard to find any, and even hard to google.
For example, bash curl curriculum vitae
will prompt Google to interpret curriculum vitae == resume
, which isn't wrong but curl resume
is an entirely unrelated query (concerned with resuming halted downloads and such).
Related, but 'fake' hits: