Utrecht, the Netherlands

Hi, I’m Chris.

Christos KarapasiasΧρήστος Καραπάσιας크리스

I build Windows software that opens instantly and stays smooth. By day I’m a senior engineer at ISOPlanner. After hours I make Wavee, a Spotify client for Windows 11, and FluentGpu, the UI engine it runs on.

Chris taking a selfie in the arena at the LCK 2024 Spring Finals
Me at the LCK 2024 Spring Finals, Gen.G vs T1
At a glance
Wavee app icon

Wavee

cproductsMusicv0.3.0 “Crest”
FreeOpen sourcex64 · ARM64~35 MB
The new Home with the daylist card, its countdown and Recently played
A new Home, built around your daylist
Full-screen view with the Spectrum visualizer and the lyric line over it
True full screen, with eight visualizers
An artist page in the artist's own colour, with the queue panel beside it
Every page takes its colour from the art
An episode page with chapters and transcript, in front of a profile page
Pages for podcast episodes and for people
Lossless FLAC playing, with the quality badge and normalization settings
Lossless FLAC through Wavee’s own decoders
Description

Spotify on Windows has always been a website in a box. Wavee speaks Spotify’s protocols itself and draws its own interface, so it opens in under a second and holds full refresh rate through a 10,000-song library.

New in 0.3 “Crest”: a rebuilt Home, a real full-screen view with eight visualizers driven by the audio you hear, lossless FLAC, pages for podcast episodes and people, and playback that no longer stutters when your PC is busy.

  • Spotify Connect in both directions
  • Lyrics synced to the syllable, beside the player or full screen
  • Tempo, key and listening stats across your library
  • YouTube, Twitch and radio as out-of-process modules
Additional information
Version
0.3.0 “Crest”
Released
2 Oct 2026
Requires
Windows 11, Spotify Premium
Get it from
Microsoft Store
Built with
FluentGpu

Independent project. Not affiliated with Spotify.

FluentGpu

A from-scratch UI engine for .NET 10. You write UI in plain C#; state lives in signals, so a change re-runs only the component that read it. It paints with Direct3D 12 and DirectWrite and ships as one NativeAOT binary.

Counter.csC#
sealed class Counter : Component
{
  public override Element Render()
  {
    var (count, setCount) = UseState(0);
    return VStack(12,
      Heading($"Count: {count}"),
      Button.Accent("+", () => setCount(count + 1)));
  }
}
// a click re-renders Counter, nothing else
Install from NuGet
<PackageReference Include="FluentGpu" Version="0.1.0" />
A value that changes 90 times a secondC#
var vol = UseFloatSignal(0.5f);
Slider.Create(vol);
// drag: thumb transform only. No render,
// no reconcile, no layout.
Navigating a full page, median frame time

Against WinUI 3 on the same ARM64 machine. NativeAOT both sides, pixel-identical pages, 620 of 620 runs.

8.33 ms · one 120 Hz frame16.67 ms · two framesFluentGpu8.4 msWinUI 316.7 ms05101520 ms
The rest of the results

Median unless noted. The losses are listed too.

MeasuredWinUI 3FluentGpu
Worst navigation frame64 ms10.9 ms
CPU per navigation6.3 ms1.1 ms
Memory, 1,000 navigations2.5 GiB104 MiB
Scroll 10k rows, CPU/frame0.98 ms0.31 ms
Cold start, 225 buttons201 ms110 ms
Where WinUI 3 wins
Empty-window memory37 MiB88 MiB
One-node updates, p90/p99~1 ms tighter
This window, frame by frame

Every frame your browser has drawn since you opened this page, checked against your display. The list keeps growing, but only the rows you can see exist.

Frames drawn
0
Rows that exist
0 of 0
Your display
–
Median frame
–

Timeline

Fifteen years from a Visual Basic form to a GPU UI engine.

  1. 2011Age 9

    First program, in Visual Basic

    WinForms · for an audience of one

    Drag a button onto Form1, double-click it, write some code, press F5. I made small apps for myself and nobody else.

  2. 2014Age 12

    Minecraft plugins in Java

    Bukkit · Eclipse

    Plugins for Minecraft servers, written in Eclipse. The first code of mine that other people ran, and my first stack traces from strangers.

    MyPlugin.javaJava
    public class MyPlugin extends JavaPlugin {
        @Override
        public void onEnable() {
            getLogger().info("Enabled!");
        }
    }

    Moved to C# and WPF

    Visual Studio · XAML

    Bigger apps, real data binding, and the start of a long relationship with XAML. Years later, FluentGpu has no XAML at all.

    <Window x:Class="WpfApp1.MainWindow"
            Title="MainWindow" Height="350" Width="525">
        <Grid/>
    </Window>

    An MW3 modding tool for the PS3

    NextGenUpdate · as PitaGyors

    A real-time modding tool for Modern Warfare 3 on modded PS3s, CEX and DEX: god-mode classes, a stat editor, name changes. The replies said it had the same mods as every other tool. They weren’t wrong.

    [MW3/PS3/Preview] Upcoming Tool [CEX/DEX] MW3 RTM Tool PitaGyors 1.24
    PitaGyors3 Aug 2014
    “… fix it when i got back from holiday …”
    Twelve-year-old me, on mobile broadband, explaining why the fix had to wait.
    The original thread
  3. 2016Age 14

    Somtoday for Windows Phone

    My first app in a store

    My school used Somtoday for grades and schedules, and there was no app for Windows Phone. I had a Nokia Lumia, so I wrote one and published it in the Store. A few thousand people downloaded it.

    Windows PhoneC#Thousands of downloads
  4. 2018Age 16

    First job: FilmFetch and Medialoc at Marteco

    Marteco, with Indyvideo

    We built and designed FilmFetch and Medialoc: software that moves festival films around the world, checks and test-ingests the DCPs, and makes previews and screeners, so nobody has to courier hard drives. The festivals below still run on it.

    Used by
    Nederlands Film FestivalIDFAInternational Film Festival RotterdamCinekidMovies That MatterNippon Connection
    medialoc.eu
  5. 2021Age 19

    Applied Physics at TU Delft

    Delft, the Netherlands
  6. 2024Two years in Korea

    Lived in Cheonan, South Korea

    About 650,000 people, 84 km south of Seoul

    Two years in Korea, including the LCK 2024 Spring Finals live: Gen.G vs T1. That’s the photo at the top of this page.

    Hecarim
    Master, 100 LPHecarim main · peaked in 2024 · retired since

    Mostly ganking at full gallop. I’ve stopped playing, but the hobby also gave me LOL Review.

  7. 2026Age 24

    Joined ISOPlanner, shipped Wavee

    Senior Software Engineer · Wavee 0.2.1 → 0.3 “Crest”

    Switched jobs to ISOPlanner as a senior software engineer. Released Wavee 0.2.1 in August, put it in the Microsoft Store, and shipped 0.3 “Crest” on 2 October.

Other work

A SaaS platform for ISO compliance: audits, risks, documents, tasks and the workflows that tie them together. I work across the .NET backend, the React front end and the integrations between them.

.NETReactTypeScriptAzureSQL Server

Players sent a game ID and got a written, timestamped review from a Challenger or Grandmaster coach within two days. It took real orders. It’s offline while Wavee has my evenings, and I’d like to bring it back.

Next.jsSupabaseStripeRiot API

Writing

All posts
2 Oct 2026 · Release notesWavee 0.3.0 “Crest”Rebuilt from the ground up: a new Home, cards that behave the same everywhere, pages for episodes and people, a true full-screen view, and lossless.Read on GitHub

Now

In Utrecht it’s
--:--:--
 
Clock updates 0Rest of window 0
Wavee after Crest
0.3 is out. Next: repaint boundaries, so full screen redraws less
FluentGpu
Hardening the parallel render thread; macOS next
On repeat
Whatever the k-indie daylist decides

You just used FluentGpu.

Scrolling this window, you passed seven things the engine does in Wavee. This page is HTML, so your browser did the work here. In FluentGpu they run natively on Direct3D 12.

0 of 7 seen
© 2026 Christos Karapasias · cproducts, KvK 98954148Privacy · Terms
–FluentGpu features fire as you scroll0/7
FluentGpu