ENGINEERING / SYSTEMS AND DECISIONS2026 / B4LLA

Behind
the interface.

Two main cases on visual editing and data integration. A smaller third case examines the distinction between encryption and authorization.

Explore the cases ↘
01 / FRAME · VISUAL EDITOREDITOR · DOCUMENT · EXPORT

One document, three representations.

Frame connects an editable component tree, its canvas representation and the exported code. Changes in one layer should not unexpectedly alter the result in another.

  1. 01

    Editable document

    Component node tree and properties that define the page structure.

  2. 02

    Canvas and responsive

    Interaction, dimensions and views that reflect the editable state.

  3. 03

    Code generation

    Turn the document into an exportable page and compare it against the canvas.

The problem
Resizing elements or moving them between containers can produce unexpected shifts and size changes. The canvas and exported code can also interpret the same design differently.
Approach / decision
Separate the document node tree and its state from canvas rendering and code generation. Compare dimensions, positions and responsive behavior in both outputs.
Scope of work
The editor connects node manipulation, responsive views and exportable page generation. I am verifying consistency between the document model, canvas and generated output.

Frame is private code; this case focuses on the document model, transformations and consistency across representations.

Frame · excerpt from the renderer and its responsive properties.TSX
export function DemoBlockRenderer({
  block,
  selectedId,
  onSelect,
  assetUrls = {},
  editorInteraction,
}: {
  block: DemoBlock;
  selectedId?: string;
  onSelect?: (blockId: string) => void;
  assetUrls?: Record<string, string>;
  editorInteraction?: DemoEditorInteraction;
}) {
  const base = block.style;

  const tablet = {
    ...base,
    padding: Math.min(base.padding, 36),
    gridColumns: Math.min(base.gridColumns, 2),
    ...block.responsive.tablet,
  };

  const mobile = {
    ...tablet,
    padding: Math.min(tablet.padding, 24),
    gridColumns: 1,
    ...block.responsive.mobile,
  };

  const automaticText = automaticTextStyle(block);
  const childLayoutDisplay = block.type === "Grid" ? "grid" : "flex";

  const style = {
    ...responsiveVariables("base", base, automaticText, childLayoutDisplay),
    ...responsiveVariables("tablet", tablet, automaticText, childLayoutDisplay),
    ...responsiveVariables("mobile", mobile, automaticText, childLayoutDisplay),
  } as CSSProperties;
02 / EUFUNDING · DATA AND WEB APPLICATIONEUROPEAN API · EXPRESS · POSTGRESQL

From an external data source to a searchable tool.

The dashboard collects European funding calls and provides ways to examine, filter and export them.

  1. 01

    External API

    Retrieve European funding calls.

  2. 02

    Data processing

    Normalize and categorize relevant fields.

  3. 03

    Exploration

    Provide search, filtering, exports and selective persistence.

The problem
External sources can provide substantial and heterogeneous data. A usable application needs to retrieve, normalize and present that data with clear ways to find relevant records.
Approach / decision
Query the source via a Node/Express API and expose the results through a searchable, filterable, paginated interface. Use PostgreSQL to store company records and levels of interest.
Scope of work
The application integrates an external calls API, supports filtering and CSV/Excel export, and provides persistence for companies and interests. Public source links appear below.

Public source: query routes, UI and persistence can be inspected in the linked files. Classification uses rules rather than an AI model.

03 / SECURENOTES · API AND SECURITYVUE · EXPRESS · POSTGRESQL

Encrypting data does not replace access authorization.

A notes application needs to distinguish between protecting content and restricting which records each user can access.

  1. 01

    Client

    Encrypt the note content in the browser.

  2. 02

    API authentication

    Identify the user and scope their requests.

  3. 03

    PostgreSQL

    Query records belonging to that user.

The problem
Encryption and authorization operate at different layers. Content can be encrypted while an authorization flaw still exposes another user’s records.
Approach / decision
Keep content encryption in the client and scope API queries to the authenticated user.
Scope of work
Read, update and delete operations use the user identifier to restrict which records they operate on.

Smaller case: public repository with notes routes and client encryption logic. A learning project, not a security-audited system.

04 / Contact

Let’s talk about software, data and ideas.

If my background matches your project or you would like to learn more about the decisions behind my work, you can reach out or explore my public repositories.