work with tech
Created: 2026-11-03 mar 12:18
In the agentic era I got an idea on how to create portfolios, run interviews and apply to job positions in an agentic environment. The goal is to have a pretty objective portfolio where I list my competences and I ask a bot to judge its content. The main script for this project is create_knowledge_base.py.
I start preparing lists where I sum up my knowledge
cd ~/lav/src/spiega/article/
head -n 5 competences.csv
| area | competence | tech | project |
| ML | machine learning, regression, fitting, training, data set preparation | py | lernia,deep_lernia,mallink |
| geo | spatial queries, algebraic transformations, GIS, document databases | py | geomadi |
| sql | data transformation, data pipelines, data structure, data modeling | sql | lernia |
| nosql | graph, data structures, query optimization | py | geomadi |
The knowledge base is organized into these kind of documents:
I created a library to interact with local models and file system model_local.py which is loaded by graph rag. The model is deployed using mcp server on docker.
The source of truth are a couple of yaml files describing the portfolio
for fName in ['personal_profile','portfolio','resume','skills']:
with open(os.environ['HOME'] + '/lav/src/spiega/markdown/'+fName+'.yml') as f:
We use gen_portfolio to create the portfolio website.
We create different lists of sources scanning the portfolio directory file:///home/sabeiro/lav/src. We can either load summaries or update summaries.
codeD = pd.read_csv(baseDir + "graph/code_desc_" + modelN + ".csv")
pictD = pd.read_csv(baseDir + "graph/pict_desc_" + modelN + ".csv")
imagD = pd.read_csv(baseDir + "graph/imag_desc_" + modelN + ".csv")
blogD = pd.read_csv(baseDir + "graph/blog_desc_" + modelN + ".csv")
compD = pd.read_csv(baseDir + "graph/comp_desc_" + modelN + ".csv")
quesD = pd.read_csv(baseDir + "graph/ques_desc_" + modelN + ".csv")
videD = pd.read_csv(baseDir + "graph/video_desc_" + modelN + ".csv")
For each file in our portfolio directory we create summaries of each element tuning the prompts and the models.
blogD = c_t.dir2tree(os.environ['HOME'] + '/lav/siti/spiega/markdown/')
llm = c_t.get_llm_mcp(model_id=model_id)
blogD = c_t.summarize_text(llm,blogD)
blogD.to_csv(baseDir + "graph/blog_desc_" + modelN + ".csv",index=False)
We ask a model to review the content of our videos and help with find consistent descriptions of an audience review.
We collect all the information for each video of our channel and create a summary channel.
We create competence descriptions with gen_compentence_summary where we ask an llm to judge our competences based on our source code review. we then create a markdown page which will be converted in article and slides to be published competences.
We use LLMs to update articles metadata like descriptions and keywords enrich metadata. This scripts analyze the content and creates all the summaries and tags we need to produce output we can index.
We extract the most relevant KPIs from the portfolio info to create a portfolio dashboard.
We create a list of questions interview.css and let the LLM answer based on the knowledge base created parsing our source files interview.
We use the most common portfolio words to create:
We extract the graph information from the org-roam database org roam. We create a function to build graphs graph_rag.py
We want to create programmatic motion graphics where we take a json file metrics_status.json and animate the display. Specific to the portfolio we have portfolio_dashboard.py to populate the json file with information from our knowledge base.
We have few choices:
Again the scope, be really consistent with the json:
We create anim_clip.py to render the single clip We use Compositor.tsx to render all clips and transitions together
We want to create an automated workflow to enable the creation of videos out of assets:
We created slide_show.py to read the picture directory and create animations and transitions between the pictures. The software:
To create more movements between the clips we have created a transition utility ref
clip : [-------------------------–—][------------------–—] transition : [------------–—]
We created anim_metrics.py to read portfolio_dash.json and create animated infographic selecting a series of different templates:
We have created org_infographic.py to read an org file and create a video:
We are writing a tool to animate static information. We want to make sure that the architecture is the same across all components.
The architecture should be consistent: each of the python create temporary clips which will be cut using Compositor.tsx adding texture and sound effects. We should have common config dict (animation duration, clip min/max length…) across the python files Once the final clip is done in the ../out directory we need to clean the temp files
in `python3 src/anim_metrics.py –compose`
[ ] output file in infographic/out/[ ] I hear only one sound effect at the beginning[ ] sound should be enveloped with an ADSR lasting a 1-2 seconds[ ] clips are too short and they don’t end before transition starts[ ] the video is 1:20 min long but the last 20 seconds are just black[ ] delete the public/tmp/ only before starting creating the clipsin `python3 src/anim_metrics.py –render`
[ ] GeoMap: zoom out starting from Germany[ ] GridKpi: box colors more aligned with the theme[ ] LinePlot: labels overlap, reduce the size[ ] AreaPlot: use the dark theme sci_fi.css[ ] DonutChart: put the legend to the right side in two columns and the total in the center of the donut[ ] Progress: use the dark theme sci_fi.css[ ] TaskTracker: use the dark theme sci_fi.css[ ] TodoTable: items overflow and don’t fit in the page[ ] Users: bubbles are not centered[ ] PieChart: expand it and fit in the page[ ] Heatmap: data is fake[ ] AreaPlot: select a lighter color scheme for the foreground elements, increase the labels[ ] Sparkline : the lines don’t cover the grid size, they are on top only[ ] Quadrant: normalize the graph[ ] Funnel: normalize the graph[ ] Waterfall: the y axis is not animated any longer[ ] PictographGrid:[ ] Logo: can you animate the paths combining the logo at the end? Add “name” and “ref”[ ] Intro: should stay at the beginning and you can use the information from Board. Make “My Title” dynamic[ ] ModalExplainer: text bright[ ] FeatureShowcase: icons are black on black[ ] Title: parse “Board” from jsonin slide_show.py
in src/anim_org.py
in dash_scifi.html we want to improve the UI referring to a/overview.html Mapping portfolio_dash.js -> a/overview.html
Then
in `src/anim_org.py`
[ ] the final output is much longer than the duration of the clips[ ] “body” and “text” are the same and truncated, where is the LLM re-writing?[ ] Make all clips slower so we can have a better transition[ ] Title : animate it, add subtitle and description[ ] OrgClip : Typewriting is not finished before the end of the clip[ ] FeatureShowcase : make icons bright not black, use css[ ] AnimatedPicture : Put a box under the text, is not readable[ ] BarChart: labels overlap, extend on x axis. Extract the real names from the table not: series 1, series 2[ ] svg it’s a vector so it should be animated as in SvgClip.tsx[ ] Each single prop in out/barrique_app.json must have a frame animation {“pop_it”:3,“hold”:50,“fade_out”:20}. One per prop item not prop overall[ ] org_files : strip all elements like #+begin, #+name, #+table till #+end[ ] highlight : you highlight but repeat the same word[ ] as per src/LoadClip.tsx let’s make src/3DClip.tsx using https://devsvideo.com/remotion/remotion-3d-threejs and https://www.remotion.dev/docs/videos/as-threejs-texture and be creative with 3D options