AWASM Portfolio is a WebAssembly-powered application that emulates a console, enabling users to interact with the developer's resume using Kubernetes-like commands. This innovative client-side architecture combines frontend and backend functionality for seamless and dynamic user interactions.
But you can also check the live demo here.
-
Locally: Use the provided Makefile:
make run
Access the application at
http://127.0.0.1:8000
. -
Docker: Pull and run the latest release image:
docker run -p 8000:80 ghcr.io/trianalab/awasm-portfolio:$(curl -s https://api.github.com/repos/trianalab/awasm-portfolio/releases/latest | jq -r .tag_name)
Access the application at
http://127.0.0.1:8000
.
You can personalize the content displayed in your portfolio by editing the preload.go
file. It contains the data that initializes your portfolio profile such as certifications, contact details, contributions, education, work experience and skills.
-
Locate the File:
Open theinternal/preload/preload.go
file in your favorite code editor. -
Understand the Structure:
The file uses Go structs to define and organize portfolio data. Each section (e.g., Certifications, Education) is represented by a struct that includes relevant fields. For example:-
Certifications:
Certifications: []types.Certification{ { Description: "Certified Kubernetes Administrator", Link: "https://www.credly.com/badges/f1c5619d-f6a1-4988-8393-5f9a21455736/linked_in_profile", }, },
-
Contact Information:
contact := &types.Contact{ Email: "edudiazasencio@gmail.com", Linkedin: "https://www.linkedin.com/in/eduardo-diaz-asencio/", Github: "https://github.com/edu-diaz", }
-
-
Edit the Content:
Modify the fields to match your personal details. For example:- Replace
"edudiazasencio@gmail.com"
with your email. - Update
"Certified Kubernetes Administrator"
with your certifications.
- Replace
-
Add or Remove Sections:
- To add new certifications, append them to the
Certifications
array:Certifications: []types.Certification{ { Description: "Your New Certification", Link: "https://link-to-your-certification", }, },
- To remove a section (e.g., Contributions), simply delete or comment out the relevant block of code.
- To add new certifications, append them to the
-
Save and Rebuild:
After making changes, save the file and rebuild the project to see your updates in the portfolio.
The frontend features two primary modes of interaction, both synchronized with the WebAssembly backend:
-
CLI Mode
- Emulates a web terminal using xterm.js.
- Supports
kubectl
commands to interact with a virtual cluster.
-
UI Mode
- Displays data as interactive, physics-based bubbles.
- Offers a dynamic, modern visualization of CV information.
The backend, written in Go and compiled to WebAssembly, runs entirely within the browser. It processes commands and manages data using a layered architecture:
- Cmd Package: Handles command parsing (via Cobra) and validation.
- Services Package: Implements business logic and data processing.
- Repository Package: Manages an in-memory key-value store.
- Factory Package: Creates mock resources with randomized data (using gofakeit).
- Models Package: Defines Kubernetes-like CRD models for CV elements.
- Preload Package: Loads initial CV data for immediate use.
- UI Package: Serializes data into YAML, JSON, or tables for consistent display.
- Util Package: Ensures data normalization and utility operations.
- Integrated Architecture: Entirely client-side for high performance and offline capability.
- Dual Interaction Modes: Switch between CLI and UI modes with real-time synchronization.
- Kubernetes-Inspired Commands: Use familiar
kubectl
syntax to explore the CV. - Dynamic Visuals: Physics-based UI for engaging data visualization.
- Extensibility: Easily customizable models and data generation.
Contributions are welcome! Open an issue or submit a pull request to share your ideas or fixes.
This project uses several open-source libraries and resources. We thank the developers of these projects for their contributions. For a full list of dependencies, their licenses, and acknowledgments, please see the NOTICE.md file.