Jakub 'Urbik' Urbanec

Web developer | DJ | AV artist

00 / ABOUT

Developer, DJ and explorer of digital things

Hello, I’m Jakub Urbanec — a Prague-based web developer and DJ performing under the name Urbik.

I have spent more than a decade working with the web, primarily on front-end applications, while continuously experimenting with graphics, games, audio, interaction and other areas where programming becomes more than just forms and buttons.

Outside software development, music is a major part of my life. I have been collecting electronic music and DJing for many years, playing mainly drum and bass, halftime, jungle and other forms of underground bass music.

Urbik performing at Dark Atmo Breaks
Urbik / Dark Atmo Breaks
Prague
Base
Czech Republic
10+
Development
years professionally
FE
Primary field
Front-end engineering
Urbik
DJ name
Alternative bass
01 / PROFILE

Three important parts of my life

01

Web development

I build modern web applications with JavaScript and TypeScript, primarily using React, Vue, Next.js and Nuxt.

I enjoy solving architecture, performance and interaction problems rather than treating front-end development purely as UI implementation.

02

Music

As Urbik, I play alternative electronic music with a strong focus on drum and bass, halftime, modern jungle and deeper experimental sounds.

I previously organized the Dark Atmo Breaks and BrainStorm club nights and currently focus primarily on DJing, mixes and musical exploration.

03

Jupiter

I am also the owner of Jupiter — Jupík — a golden hovawart and a fairly substantial part of my everyday life.

Hovawarts are large, intelligent working dogs, so living with one provides a useful counterbalance to spending too much time in front of a computer.

Offline mode

Away from the screen

When I am not programming, I am usually listening to music, preparing DJ sets, looking for new releases or spending time outside with Jupiter.

I am naturally drawn to things that involve exploration — whether that means discovering an unusual record, understanding how a browser renders graphics, experimenting with a new API or finding a new place during a long walk.

Jakub with Jupiter the hovawart
01 / DEVELOPER

Basic developer info

I am proficient in Vue as well as React, capable of working with framework ecosystems and component libraries, as well as developing new components, handling complex data transformations and integrating applications with APIs primarily through REST and WebSockets. I also have experience with build processes, deployment, debugging, performance optimization and more complex algorithms.

I have been working with TypeScript for about 4 years and Vue for around 5 years. I first used React professionally later than Vue, but I am comfortable working with both ecosystems. Altogether, I have approximately 13 years of experience with JavaScript.

Beyond conventional front-end development, I am strongly interested in computer graphics and interactive browser experiences. I have spent a significant amount of time working with Canvas 2D, animation, particles, compositing and real-time rendering, while also gradually expanding my knowledge of WebGL and GPU-based graphics.

I am also capable of working with JavaScript and TypeScript on the backend using Node.js at a solid level, although I consider front-end engineering, browser technologies and graphics to be my main areas of specialization.

Outside of work, music is probably my biggest interest. I perform as a DJ under the name Urbik, and I also have a large golden hovawart named Jupiter.

02 / PORTFOLIO

This portfolio webpage

Link to the repository: repository with extensive README.md

One of the reasons behind this portfolio is to present my work while also using the project as a place where I can experiment with web programming outside the constraints of commercial development.

From the technical side, one of my goals was to use a minimal number of libraries while keeping the application written in TypeScript and separating the front end and back end. The backend is deliberately simple and mainly provides server-side rendering using functionality shared with the front-end source.

The front end experiments with lower-level concepts normally hidden behind modern frameworks. One example is the use of JavaScript Proxy to implement a small reactive store. Rather than building another application entirely around an existing framework, I wanted to look underneath some of the abstractions I use professionally every day.

The generative visuals in this portfolio are custom-built for this project, following the same approach as my separate generative graphics project Eraser, which is a visual effect composer living in its own repository. Eraser is used here only as a source of techniques and visual language, not as an integrated dependency, which also created an interesting development challenge: keeping the two projects independent while maintaining a good development experience across both repositories and their shared environment.

03 / ERASER

Generative visual project

Eraser is my long-term generative visual project and probably the clearest connection between my interests in programming, computer graphics and music. It originally developed alongside my DJ work and takes its name from my original mix Eraser, which won a competition organized by Decoded Magazine.

The visual explores transformation, distortion and the boundary between recognizable shapes and abstraction. Elements can appear structured or almost organic for a moment and then dissolve, collide or become unstable. I am interested in creating something that feels generated by a system while still having a strong visual character rather than looking like a conventional screensaver or visualization.

Technically, Eraser is a real-time browser graphics experiment built from multiple rendering layers. The current visual combines WebGL with two Canvas 2D layers. Much of the visual complexity comes from large numbers of particles, transparency, blending and different compositing operations.

Keeping a substantial part of the project in Canvas 2D is intentional. I like the API and the flexibility of its compositing model, even though this also makes performance one of the most challenging parts of the project. Large transparent areas, particle rendering and multiple stacked canvases can become expensive, especially at high resolutions.

Because of that, Eraser has also become a practical playground for investigating how browsers actually render graphics. I have spent a lot of time profiling frame rendering, reducing unnecessary drawing, experimenting with batching and state changes, studying alpha and composite-operation costs and looking at the interaction between CPU rasterization, GPU acceleration and the browser compositor.

  • Multi-layer real-time rendering using WebGL and Canvas 2D
  • Particle systems, transparency and compositing
  • Procedural and generative visual behaviour
  • Browser rendering and frame-rate optimization
  • Experimentation with the boundary between 2D raster graphics and GPU rendering
  • Used as a source of visual techniques for this portfolio, not as an embedded dependency

The project continues to evolve as I learn more about browser graphics. My current direction is to keep exploring what can be achieved with Canvas 2D while gradually introducing more GPU-driven techniques through WebGL and, eventually, WebGPU where they make sense.

04 / GAMES

Game development

I have loved games since childhood, and they were one of the reasons I became interested in programming in the first place. When I started learning web development around 15 years ago, one of my first larger projects was a D&D-inspired browser game built using PHP 5, JavaScript, jQuery and XHR.

I originally imagined that game development might eventually become a career. As the industry and the complexity of modern games grew, however, I followed web development professionally instead. Game development nevertheless remained one of my hobbies and an important reason for my continuing interest in graphics, animation and interactive systems.

I experimented with several smaller games, with two projects becoming presentable enough to mention here. The first is a simple Asteroids-like browser game built with JavaScript, Canvas and EaselJS. The second is Quarantine Zone: Warfare, a mobile top-down shooter developed with Solar2D.

Quarantine Zone: Warfare eventually grew into a considerably more ambitious project. It has never been publicly released and remains a work in progress, but developing it taught me a lot about game loops, object management, animation, interaction and designing systems that have to operate continuously in real time.

01 / BIO

Music Bio

Beyond programming, music has always been one of the most important parts of my life. I perform under the name Urbik and have been collecting electronic music and DJing for well over a decade.

What started as an obsession with discovering new records gradually developed into regular club performances, radio appearances, DJ competitions, guest mixes and eventually my own event series.

My musical roots are primarily in drum and bass. I discovered the genre during the period when drum and bass was becoming increasingly visible in Prague, and over time I became much more interested in its less conventional edges than in its mainstream forms. That gradually led me towards deeper drum and bass, autonomic, halftime, modern jungle, experimental bass music and other sounds built around broken rhythms.

Urbik performing at Let It Roll
Urbik / Let It Roll Winter Warm Up

I am especially interested in music that has a strong individual character: unusual rhythm, atmosphere, sound design or structure. I do not approach DJing as simply playing a sequence of recognizable tracks. For me, selection is the most important part of the process. I enjoy finding music that is overlooked, connecting records from different scenes and periods, and building sets that have their own identity.

A major turning point came around 2022, when I started performing regularly in Prague clubs and became much more involved in the local scene. During that period I won several DJ contests, started receiving more bookings and eventually founded my own club nights, Dark Atmo Breaks and BrainStorm.

Although drum and bass remains the center of my musical identity, I do not want my sets to be limited by genre labels. Depending on the context, I can move through 170 BPM jungle, halftime, autonomic, broken beat, bass music, techno-influenced material and slower experimental electronics. The common element is usually rhythm, atmosphere and music that does not immediately reveal everything about itself.

02 / SOUND

My Sound

My sets are usually rooted in bass and breaks, but I am more interested in a particular feeling than in maintaining a strict genre definition. I tend to look for music that sits somewhere between functional club music and more detailed listening music.

Within drum and bass, I am particularly drawn to the space around halftime, autonomic and modern jungle: music where rhythm can breathe, where silence and space matter, and where the relationship between percussion, sub-bass and atmosphere is often more important than constant intensity.

At 170 BPM, I like sets that can move between stripped-down rhythmic tracks, abstract sound design, deeper rollers, modern jungle and atmospheric material without becoming either relentlessly dark or overly smooth. Contrast is important to me. A set can be heavy without being aggressive all the time, and experimental without losing its physical impact.

  • Drum and bass
  • Halftime
  • Autonomic
  • Modern jungle
  • Experimental bass music
  • Breaks and broken rhythms
  • Occasional excursions into techno and slower electronic music
03 / PROMOTER

Dark Atmo Breaks & BrainStorm

My involvement in music eventually moved beyond DJing. I founded Dark Atmo Breaks and later BrainStorm as event concepts focused on music that I felt was underrepresented in the regular Prague club program.

DAB

Dark Atmo Breaks

Built around deeper, darker and more experimental approaches to drum and bass, halftime and related bass music.

BS

BrainStorm

Broadened that idea further, creating room for alternative forms of electronic music and for artists whose sets did not always fit easily into conventional genre-focused club nights.

Through these events I had the opportunity to perform together with friends, local DJs and artists such as Last Life, Heatwave and Fuj. The nights also gave me experience on the other side of club culture: programming lineups, communicating with artists and venues, promoting events and trying to create a coherent identity around a particular musical idea.

Organizing events significantly influenced how I think about DJing. A successful night is not simply a collection of individual sets. The sequence of artists, changes in energy and the relationship between different sounds can create a much larger musical narrative. That way of thinking also carries over into how I construct my own recorded and live sets.

At present, I am focusing primarily on DJing, recording mixes and developing my own musical direction rather than actively promoting regular club nights.

04 / GIGS

Selected Performances

Most of my performances have taken place in Prague and the Czech underground electronic scene, although I have also played outside Prague and been selected for international opportunities.

Shadowbox on Radio 1guest DJ appearance
Let It Roll Winter Warm Up, Pilsenwinner of the DJ contest
Dark Atmo Breaks eventspromoter and resident DJ
BrainStorm eventspromoter and resident DJ
Vzorkovnaregular performances and residency
Cross ClubPrague
Chapeau RougePrague
KlubovnaPrague
FAMUPrague
K7 and rest.artPrague
Festival VIDINY 2025Třeboň 105
Ravekjavik Festival, Polandselected through the YEAH initiative alongside artists including Bambi Uzi — eventually missed because of appendix surgery

I have also performed at smaller club nights, independent events and underground venues that are difficult to summarize in a single list. These smaller events have often been equally important to me because they provide more freedom for unusual selections and longer musical journeys.

05 / SETS

Recorded Sets & Guest Mixes

Recorded mixes are an important part of my DJ work. A club set is influenced by the room, the time of night and the audience, while a recorded mix offers much more freedom to construct a specific musical idea from beginning to end.

I enjoy preparing mixes that can function almost like self-contained pieces. Selection, sequencing and transitions are used to create a progression rather than simply demonstrating a collection of tracks. Some mixes stay tightly focused on one sound, while others deliberately connect several related styles.

Over the years I have recorded guest mixes for a number of collectives, radio projects and platforms:

Syhda Music
Dub Logic
Vykhod Sily
Rádio Punctum
Dark Atmo Breaks mix seriesown series

The Dark Atmo Breaks mix series extends the philosophy of the club night into recorded form. It gives me a place to present music I particularly value without having to adapt the selection to a specific dancefloor or event.

My mixes often contain music from producers and labels occupying the more experimental sides of drum and bass and jungle. Depending on the particular recording, this can include sparse halftime, modern jungle, atmospheric 170 BPM material, autonomic-influenced tracks and more abstract forms of bass music.

06 / SELECTION

How I Approach DJing

I see DJing primarily as curation. Technical mixing matters, but technique alone cannot make a set interesting. The most important decisions happen before and during the selection of the music itself: what to include, what to leave out, what should follow what, and how long a particular mood should be allowed to develop.

I spend a lot of time searching for music and following artists, labels and smaller scenes. Digging is therefore almost inseparable from DJing for me. I enjoy finding tracks before they become familiar, discovering older music that still sounds unusual today, and hearing relationships between records that were never necessarily intended to belong together.

I generally prefer long transitions and gradual changes when the material allows it, but I do not try to force every record into the same mixing style. Some tracks benefit from blending, others from contrast or an abrupt shift. The musical idea should determine the technique, not the other way around.

I am also interested in working outside the limitations of a traditional two-deck setup. For some recorded sets I have used VirtualDJ with four virtual decks, allowing additional layers, extended transitions and more control over how individual pieces of music interact.

Ultimately, I want a set to feel deliberate without sounding over-planned. The goal is to create a coherent world for an hour or two while still leaving enough room for surprise.
07 / INFLUENCES

Labels, Artists & Musical Direction

A large part of my taste developed around producers and labels that expanded the vocabulary of drum and bass rather than simply refining an established formula. I have always been attracted to scenes where drum and bass meets sound design, techno, ambient music, dub and experimental electronics.

Samurai Music and the wider musical world around it have been an especially important reference point for me, together with the autonomic movement and the later development of halftime drum and bass. I am interested in the line that connects those earlier experiments with contemporary producers pushing 170 BPM music in new directions.

Producers such as Last Life, gyrofield, Quartz, Overlook, Mako and Rainforest represent different parts of that spectrum and have all appeared in or influenced selections I have worked with. What connects them for me is not one specific sound, but the willingness to treat drum and bass as an open format rather than a fixed genre template.

LAST LIFE · GYROFIELD · QUARTZ · OVERLOOK · MAKO · RAINFOREST
08 / NOW

Current Direction

At the moment I am concentrating more on DJing and recorded mixes than on organizing events. This gives me more time to dig for music, develop new sets and explore the part of drum and bass that interests me most.

Modern jungle and experimental 170 BPM music are currently especially important to me. I am interested in sets that combine the physical energy of drum and bass with the detail and freedom usually associated with more experimental electronic music.

I do not want Urbik to become associated with one narrowly defined subgenre. The project is ultimately about selection: finding original music, placing it in the right context and creating sets that offer something different from what can be heard on an average night out.

Published

Eraser: Building a Generative Visual Instrument in the Browser

Eraser is a browser-based generative visual instrument built for live control rather than playback. Instead of presenting a sequence of finished animations, it combines several independent systems: particle networks, reactive geometric fields, lightning, procedural surfaces, typography, atmosphere and bloom, and lets them remain active at the same time.

Forces, Sweeper, Shader, Standing Waves and Bloom run as separate layers, often at different update rates. Canvas 2D, Three.js, GLSL, DOM typography and CSS blend modes combine their outputs into one image. This article looks at how those layers are calculated, rendered and connected.

These layers are primarily composited, not tightly coupled simulations. Most run independently and interact only minimally: their outputs overlap and blend visually, while direct data exchange is limited to a few specific connections, such as Bloom using the Sweeper canvas as its source.

Eraser exposes keyboard and MIDI controls and includes track typography as part of the presentation. It is not an automatic audio visualizer: its active rendering path does not analyze sound. Motion comes from timed transitions, procedural behaviour and live control.

The term instrument refers here to that control model: parameters and scene actions can be changed during rendering rather than only played back from a recording.

01 / COMPOSITION

The software is modular. The image is not.

The six Violet captures show how several layers contribute to the same composition.

It begins with little more than a violet field and unstable electric lettering. A particle network then spreads across the frame, producing links and translucent polygonal surfaces. Later, circular masses of square cells appear, lightning crosses the image, softer atmospheric shapes accumulate behind the geometry, and bloom eventually pushes parts of the scene toward near-white intensity.

These effects do not necessarily replace one another. Several layers can remain active while their relative visibility changes. Their visual overlap comes mainly from compositing, not from the layers continuously influencing one another’s simulation state.

Violet composition with electric lettering in a nearly empty field
01
electric typeatmosphere

Sparse and dense states can use the same underlying systems. Their visible differences depend on particle counts, opacity, field parameters, compositing operations and bloom intensity, rather than requiring an entirely different renderer.

The final image is crystal clear, with fine lines and sharply defined geometry that can look almost like vector graphics, although the canvas output is raster-rendered rather than a resolution-independent vector image. In my experience, it is best presented on large LCD screens, which preserve that crispness and detail. Projectors tend to soften the image and reduce the clarity that gives these compositions much of their character.

02 / FORCES

Velocity does more than move a particle.

The Forces layer uses moving particles whose velocity and connectivity also determine rendering parameters.

Particle state is calculated in a Web Worker. The worker updates movement and generates links, joints and triangles, while the main thread handles Canvas 2D rendering. This separates simulation work from the main thread, but does not remove the dominant rendering costs of this animation style. The underlying interaction model is stylized rather than physically exact: nearby particles react to one another using distance, mass, drag and boundary reflection.

Velocity is then reused as a visual parameter.

Faster motion can strengthen and thicken links, while particle radius and lightness decrease. Highly connected points can receive glowing joints, and connected triples can become translucent triangular surfaces. The triangles are derived from the existing connection graph rather than from Delaunay triangulation or a conventional mesh generator.

The simulation therefore supplies both positions and drawing data: link weights, joint markers and triangular surfaces.

Force points changing radius and color depending on velocity
slow
larger / lighter particle · weaker link
velocity ↑
fast
smaller / darker particle · stronger link
KEY IDEA
Motion is not only translated into position. The simulation state changes the way geometry is rendered.

Data produced by the simulation determines visual structure, not only position. The Calico captures show links, joints and triangular surfaces produced from the connection graph.

Another Calico state showing connected network geometry
Calico / another state of the network
03 / SWEEPER

The wave moves. The cells do not.

Sweeper works almost in reverse. Its cells sit on a fixed grid, normally about 18 pixels apart. The coordinates themselves do not move. Instead, circular influence fields travel across the grid and temporarily change the cells they reach.

A field has a center, radius, propagation speed, width, maximum cell size, shape and blend mode. A cell reacts most strongly when it is close to the moving wavefront, roughly when the difference between its distance from the center and the field radius becomes small:

|d−r|

Here d is the cell’s distance from the field origin and r is the current radius.

Visually, this can resemble an expanding object or explosion. Technically, the geometry remains stationary. What changes is its size, color, shape and composition.

Fields can render squares, circles or five-point stars, and overlapping fields can produce multiple rendered instances at the same grid coordinate. Blend operations such as difference, color-burn, hard-light, color-dodge can make identical motion produce very different images.

Stationary grid cells grow as a circular wavefront passes over their coordinates.
fixed coordinate
moving influence field
rendered cell response
distance to wavefront| d − r |controls response
VISUAL PARADOX
What looks like an expanding object is often stationary geometry being temporarily rewritten by a traveling field.
04 / CAUSALITY

One system can become the cause of another.

Sweeper also contains moving agents, some of which are rendered as luminous “suns” using layered radial gradients. Their movement can follow predefined GSAP paths, including BPM-derived durations, or switch into a gravitational mode.

The gravity mode uses softened inverse-square attraction:

a=450md2+802

Additional damping, speed limits, boundary forces and collision handling stabilize the motion. It is deliberately art-directed physics rather than an exact orbital simulation.

Collisions also produce events outside the motion calculation.

A collision position is returned to Sweeper and used to create a new influence field. This is a local interaction within Sweeper, not a general coupling between Eraser’s separate rendering layers.

01attraction

agents move under softened pairwise forces

02collision

the encounter produces a position

03new field

Sweeper receives a new circular influence

04geometry reacts

the collision becomes a visible grid event

Geomancy / recording
05 / TYPOGRAPHY

Typography as another visual material.

Eraser uses typography in two different ways.

Regular DOM text provides credits, track information and repeated titles, often combined with blend modes. Separately, Sweeper loads font data and extracts glyph coordinates so that lettering can be treated as geometry.

Those coordinates can be filled and electrified with short lightning fragments, producing the unstable lettering visible in sequences such as Violet. The font is not rendered as a perfect typographic outline; it becomes source material for another procedural effect.

Glyph coordinates are reused as input to the procedural drawing code, in the same way that velocity supplies link weights and collision coordinates supply field origins.

06 / PROCEDURAL DETAIL

Bloom, lightning and procedural detail.

Glow, branching lines and repeated shapes add light and texture to the composition.

Bloom adds a luminous version of the Sweeper geometry to the composition. At higher intensity, individual cells can merge into large fields of light, as in the later Violet states.

Lightning is generated using recursive midpoint displacement. A straight segment is repeatedly subdivided, its midpoints shifted sideways by random amounts, and the displacement reduced at each step. The result is unpredictable in detail but still constrained by clear endpoints and rules.

The same principle appears in the petal system. Its rosette-like forms are not constructed from individual petals; they emerge from overlapping circles arranged on a lattice. Complex-looking geometry comes from simple primitives interacting.

Bloom / post-processing

From crisp cells to fields of light.

The Sweeper canvas supplies a live Three.js texture for bloom, whose output is screen-blended into the composition.

CANVAS 2DSweeper
THREE.JSCanvasTexture
SCENERenderPass
POST FXUnrealBloomPass
OUTPUTOutputPass
CSS COMPOSITEscreen

Violet combines sharply defined geometry with softer, luminous regions. Bloom intensity changes the balance between the two.

Dense Violet composition with strong central bloom
Violet / crisp geometry and bloom
07 / PERFORMANCE

Performing the system.

The final layer is control.

Eraser’s scene manager connects keyboard events, MIDI values, timed callbacks and visual parameters. MIDI values from 0–127 are normalized into values that can directly influence the graphics. One control bank affects Forces parameters such as links, particle count, drag, mass and size; another controls fields, suns, gravity and bombs; a third reaches into shader opacity and bloom.

Velocity can also affect the behaviour of an action. A color transition, for example, can range from roughly ten seconds to about 100 milliseconds depending on how strongly the MIDI pad is triggered.

These mappings allow scene actions and parameter transitions to be triggered while the layers continue rendering.

The controls change simulation and rendering parameters, rather than selecting only from finished images.

08 / STATUS

Technical summary and project status.

Eraser combines TypeScript, Vite, Canvas 2D, Web Workers, Three.js, GLSL, GSAP, TinyColor, simplex-noise and font processing.

Canvas handles immediate drawing. A worker handles particle simulation. Three.js handles bloom and other GPU-oriented tasks. GLSL provides procedural shading. The DOM remains part of the composition rather than merely surrounding it.

The main performance constraint in this Canvas 2D-heavy approach is not usually the particle calculations. A likely bottleneck is GPU pixel-processing throughput, particularly alpha blending, overdraw and compositing: overlapping transparent shapes can cause the same pixels to be processed repeatedly, even within one canvas. Rasterization and moving image data through the browser’s rendering pipeline can add further costs. A Web Worker does not make those operations cheaper, and a more powerful discrete GPU does not necessarily make this workload faster. Canvas 2D uses a browser-managed rendering path rather than giving the application direct control over GPU work as WebGL does.

There are two distinct stages here. Canvas 2D applies globalAlpha and globalCompositeOperation while drawing into each canvas surface; Chrome’s compositor then combines the overlapping canvas and DOM layers, including their CSS blend modes. The second stage cannot explain the slowdown on its own: I encountered performance problems with Forces on a single canvas, drawing only a few hundred points or fewer, together with links, changing circle radii and alpha blending. That points toward costs within the canvas drawing path, not just the final composition of stacked layers. It does not by itself establish whether pixel throughput, path rasterization, drawing calls or frequent drawing-state changes dominate; that distinction requires profiling.

In my experience, Eraser runs better on Apple Silicon than on machines with otherwise powerful discrete GPUs. That is an observation about this workload, not a general GPU ranking: browser implementation, memory bandwidth, data transfers and hardware architecture can matter more here than headline graphics performance. Apple Silicon’s unified memory is relevant to that distinction, although these observations alone do not establish which part of the pipeline causes the difference.

The implementation demonstrates several ways of reusing simulation data across rendering layers: velocity changes geometry, fields alter a stationary grid, collisions create new fields, and glyph coordinates become input for lightning. The resulting image depends on both those calculations and the browser’s compositing of their outputs.

Development of Eraser is discontinued for now. I do not expect substantial further evolution of this tool; the source and recordings document its current state rather than an active roadmap.

My next visualization and graphics work will probably focus on 3D and Three.js. That is a likely direction for separate experiments, not a planned next phase of Eraser.

Comments

No comments yet.

Markdown formatting is supported.