Interactive CLI Business Card
A fast, interactive CLI business card implemented in Rust.
🚀 Quick Start
Cargo (direct Rust install)
cargo install carlosferreyra
carlosferreyra
uvx (wrapper entrypoint)
uvx carlosferreyra
bunx (wrapper entrypoint)
bunx carlosferreyra
Features
- ⚡ Fast Rust CLI
- 📧 Direct email contact
- 🌐 Portfolio and social links
- 🖥️ Interactive menu
- 🔧 Non-interactive mode via
--open - 🎯 Resume-driven behavior from
resume.jsonwith runtime refresh from GitHub
Project Structure
business-card/
├── src/ # Rust source code
│ └── main.rs
├── Cargo.toml # Rust package manifest
├── Cargo.lock
├── resume.json # Embedded fallback resume snapshot
└── README.md
Configuration
The CLI fetches resume metadata at startup from:
https://raw.githubusercontent.com/carlosferreyra/carlosferreyra/main/resume.json
If the fetch fails, times out, or returns invalid data, the CLI falls back to the embedded root
resume.json in this repository.
- Personal information (name, title, company, location, skills)
- Links (email, portfolio, GitHub, LinkedIn, Twitter, LeetCode)
- Business-card-labeled portfolio projects
The CLI renders the profiles.business-card profile plus links, skills, and projects whose labels
include business-card.
To refresh the embedded fallback snapshot before a future release, run:
uv run scripts/sync_resume.py
Distribution Model
- Source code in this repo: Rust only
uvx carlosferreyra: Python ecosystem entrypoint wrapper (generated/published in release pipeline)bunx carlosferreyra: Node ecosystem entrypoint wrapper (generated/published in release pipeline)
The uvx and bunx packages are distribution entrypoints, not source implementations in this
repository.
Release Pipeline
-
Before cutting any patch/minor/major release, refresh the embedded offline fallback:
uv run scripts/sync_resume.py
-
Releaseworkflow (.github/workflows/release.yml) is the source of truth. -
It runs on version-tag pushes and pull requests; pull requests run distribution planning only.
-
Version-tag pushes build binaries and installers with
dist, then publish a GitHub release. -
Version bumps, tag creation, and crates.io publication are separate maintainer steps.
-
After a successful release push,
release_pypi.ymlandrelease_npm.ymlverify that the matching GitHub release and installer exist and that its tag points to the checked-out commit, then publish the wrappers. -
Those workflows generate Python/npm wrapper package metadata from
Cargo.tomlon the fly (no dedicatedpython/ortypescript/source folders).
Development
cargo run
cargo run -- --open portfolio
cargo check
cargo build --release
cargo test --locked
cargo clippy --locked --all-targets -- -D warnings
uv run --with httpx python -m unittest discover -s tests -v
node --test tests/npm_wrapper.test.cjs
Connect with Carlos
- GitHub: github.com/carlosferreyra
- LinkedIn: linkedin.com/in/eduferreyraok
- Website: carlosferreyra.com.ar
- Email: eduferreyraok@gmail.com
License
MIT
Appendix: Package Index Wrappers
The packages published to PyPI and npm are entrypoint wrappers around the Rust CLI binary.
pipx/uvxpackage: invokes the Rustcarlosferreyraexecutable.npx/bunxpackage: invokes the Rustcarlosferreyraexecutable.
The wrappers install the latest prebuilt executable when it is missing or predates self-update support (1.2.17). Cargo and Rust are not required. A newer installed binary is never downgraded to match an older wrapper.
The Rust executable checks the latest stable GitHub release on every invocation, including
--version, --help, and --open. Checks have a 1.5-second request timeout; downloads have a
30-second request timeout. New releases are verified against sha256.sum, installed automatically,
and restarted with the original arguments. There is no confirmation prompt or interval cache.
Update notices go to stderr. If a check, download, verification, or installation fails, the existing
card remains usable. Network access is therefore needed for updating, but not for viewing the card.
For a manual installation:
cargo install carlosferreyra --locked --force
Automatic wrapper installation supports macOS and Linux. Windows users must provide a separately built Rust executable; published releases currently contain no Windows binaries.
Metadata
Release files for carlosferreyra 1.2.17
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| carlosferreyra-1.2.17.tar.gz | 3.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| carlosferreyra-1.2.17-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 8.6 kB
Release files / carlosferreyra-1.2.17.tar.gz
| Download URL | carlosferreyra-1.2.17.tar.gz |
|---|---|
| Size | 3.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
668b58bc66d374b394b7721cb860766eaf08fd2904d7aaf1f7185069b61d1471
|
|
BLAKE2b-256 checksum How to use checksums |
1b3c7b20897fc3c8d216b1b3f6f2a4450cf6f5b4826e030e79b575e81160cc2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / carlosferreyra-1.2.17-py3-none-any.whl
| Download URL | carlosferreyra-1.2.17-py3-none-any.whl |
|---|---|
| Size | 4.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
75ccbd9706d5d96ca12e915ccc9ca7bd78485239173fbf9cae3a7c280ff9d4b7
|
|
BLAKE2b-256 checksum How to use checksums |
a22d2bff1fa1ffc76def9652a7a3d27faff3bb7a43d72fd86c88f4dd32bd6529
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|