Spiega documentation

portfolio creation
work with tech

portfolio creation

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.

data preparation

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

knowledge base

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.

portfolio

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.

summaries

We create different lists of sources scanning the portfolio directory file:///home/sabeiro/lav/src. We can either load summaries or update summaries.

coding
.py, .cpp, .h
articles
.html, .org
pictures
.jpg, .jpg
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)

video review

We ask a model to review the content of our videos and help with find consistent descriptions of an audience review.

youtube channel

We collect all the information for each video of our channel and create a summary channel.

competences

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.

metadata generation

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.

metric dashboard

We extract the most relevant KPIs from the portfolio info to create a portfolio dashboard.

agentic interview

We create a list of questions interview.css and let the LLM answer based on the knowledge base created parsing our source files interview.

graphics

We use the most common portfolio words to create:

word clound
word cloud
geo experience
geo experience

graphs

We extract the graph information from the org-roam database org roam. We create a function to build graphs graph_rag.py

motion graphics

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:

remotion
nodejs application to animage demos
manim
famous vlogger python library for complex animations
two.js
in browser animated vector graphic
three.js
in browser 3d animations

architecture

Again the scope, be really consistent with the json:

assets
library of assets in public/ (sound effects, textures, icons…)
config
anim_config.py which handles all json configuration files
director
anim_pictures.py anim_org.py anim_metric.py which will:
  • select the .tsx component from remotion
  • select the needed assets
  • select the transitions between clips

We create anim_clip.py to render the single clip We use Compositor.tsx to render all clips and transitions together

media

We want to create an automated workflow to enable the creation of videos out of assets:

metrics
metrics_status.json
icons
icon
pictures
pictures
texture
texture
sound effect
sound_effect

slide show

We created slide_show.py to read the picture directory and create animations and transitions between the pictures. The software:

transition

To create more movements between the clips we have created a transition utility ref

clip
one picture, animates a gentle movements and creates a clip with alpha channel
transition
texture
a sudden opacity and glow increase
sound
starts at the beginning of the transition
cross clip
a random selection between: fade, wipe, tile, zoom

clip : [-------------------------–—][------------------–—] transition : [------------–—]

animate metrics

We created anim_metrics.py to read portfolio_dash.json and create animated infographic selecting a series of different templates:

bar charts
radar plot
heatmap
table

org2video

We have created org_infographic.py to read an org file and create a video:

sections
we scan all the sections and create a slide as in reveal
content
an LLM picks graphic elements, titles, subtitles and text and select the proper animation
animation
we render the slide into a separate clip
transition
we cut all the clips together using transitions

coding agent temp

We are writing a tool to animate static information. We want to make sure that the architecture is the same across all components.

anim_metrics.py
animate data from a static json
slide_show.py
animate pictures
org_infographic.py
animate sections from an org file

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 clips

in `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 json

in slide_show.py

  • picture movement should last as long as the clip lasts
  • Wipe zooms too much. It shouldn’t zoom
  • the texture should bridge both clips and last as long the transition lasts
  • transitions are not applied, I see only hard cut
  • only the first sound is played
  • Tile instead of cutting the picture it creates multiple copies

in src/anim_org.py

  • We need to define the key items as: “text”,“subtitle”,“description”,“image”,“table”,“emphasis”,“arrow”,“diagram”,“plot”…
  • For each element add {“popIn”:12,“hold”:60,“fadeOut”:8} with the number of frames for the animation
  • Select a texture for each clip and add it into out/compositor_remotion.json
  • A list of related icons in out/compositor_remotion.json
  • Create a src/OrgClip.tsx starting from src/LoadClip.tsx where we include the ability to render images, tables, charts and diagrams reading some components we have in src/*tsx
  • Select a limited collection of those elements we can use and add them to src/OrgClip.tsx
  • This information will be read from out/compositor_remotion.json and activated only if the property of that clip is present
  • We need a separate LoadClip.tsx capable of managing multiple items as BentoGrid, Board…
  • We need a data structure in out/compositor_remotion.json to add images, tables, diagrams, plots…
  • The LLM need to select multiple elementary components (FeatureShowcase, PortfolioBreakdown)
  • We need to identify “title”, “subtitle”, “description” and animate them (randomly between BoldText.tsx, TypeWriting.tsx, FeatureShowcase.tsx…) sequentially throughout the duration of the clip
  • When a table use Table.tsx
  • When an image use Snapshot
  • Use the complete page
  • Gently animate the text moving title, subtitle and text
  • Table is messy, use Table.tsx instead
  • Animate colors, movements, arrows

in dash_scifi.html we want to improve the UI referring to a/overview.html Mapping portfolio_dash.js -> a/overview.html

  • KPIGridid -> reactorTempPanel
  • ChatBox -> actionLogContainer
  • RadarChart -> radar2-container
  • BarChart -> advPulsePanel
  • BarChartSmall -> pulsePanel
  • MetricCard -> realtimeECGPanel (with circular movement)

Then

  • expand more styles and colors like in sci_fi.html
  • HeatmapGrid is not displaying the info
  • animate lines, bars and images like in a/overview.html with some noise

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

Date: 2026-09-07 lun 00:00

Author: sabeiro

Created: 2026-11-03 mar 12:18

Validate