Render 'JSON Resume' sources to ANSI-enriched output for terminal clients (cURL, wget, ...) to consume.
Project description
ancv
Getting you an CV (ANSI-v?) straight to your terminal.
Be warned though, this is entirely useless:
Getting started
-
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
Design
Features
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
Concept
(put this as an SVG flowchart, left to right with conceptual sketches)
Skeleton + Theme + Language + ASCII-mode toggle + Resume Data ==> terminal CV
Contributing
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
TODO
- Core application
- 3 full templates implemented
- ASCII-safe mode implemented
- Implement test suite
- Unit tests (not many to do...)
- Integration tests:
- Create one fully featured JSON resume
- Create derived resumes with all possible fields (all combinations thereof?) set to
None
where legal (given the schema) - Compare all these to expected files (the files contain the ANSI escape characters literally)
- Load tests
- Other
-
https://ancv.io landing page for browsers(just a redirect to GitHub for now) - Venn diagram
-
Hand- [ ]draw on ReMarkable? - One circle: 'people working with resumes'
- other circle: 'people working with terminals'
- tiny overlap: 'you', with arrow
-
- Demos
-
curl
,wget
(PowerShell?) examples - all templates
- all languages
-
-
Roadmap
- Multiple
locale
support for hardcoded strings (likePresent
for a missing end date)- German, French, Spanish
- Image support (fetch bitmap, convert to ASCII art (random example))
Other solutions
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:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.