Bedirhan Yıldırım

Software Engineer & Entrepreneur

Category: Warsaw

  • I Built Isometric Warsaw: A Pixel-Art Map of the Whole City with AI Agents

    I Built Isometric Warsaw: A Pixel-Art Map of the Whole City with AI Agents

    Published:

    Last updated:

    From a tweet about New York to the whole of Warsaw in pixel art. A story about open data, a lot of AI agents, and a city that turned out to be much more detailed than I thought.

    This is Isometric Warsaw: an isometric pixel-art map of the entire city that you can pan, zoom and rotate in your browser. 197,000 buildings, almost two million trees, trams and trains on their real timetables, planes landing at Chopin, ducks on Lake Balaton, the real sun for any date, and the Vistula rising and falling with the seasons.

    It took two days. I didn’t write a single line of code, and apart from the hosting I already had, it didn’t cost anything.


    It started with a tweet

    A few days ago I opened X and saw isometric.nyc: a giant SimCity-style pixel map of New York, built with image models and coding agents. Not long after, someone did the same for London with tiny.london, and published a beautiful write-up of how they did it.

    I thought: I want one of these too.

    The city I really wanted to do was Istanbul. But Istanbul is huge, and a first attempt should be something I can actually finish. So I picked the city I live in: Warsaw. It is smaller, mostly flat, and I walk its streets every day.

    Then we did the maths on the London approach. It uses a paid image model to create thousands of training examples and rented H100 GPUs to paint the city tile by tile. That would mean real money. I said no. If we were going to do this, it had to be free.

    The trick: no image AI at all

    Instead of asking an AI to paint the city, we decided to draw it. The map is a real 3D scene rendered with three.js, but at half resolution, with a limited palette, dark outlines where depth jumps and every pixel snapped to a grid. The result looks hand-made, but it is pure geometry. That has some nice side effects:

    • No seams between tiles, because there are no tiles. The city is drawn in one piece.
    • Water is exactly where water is. The model can’t invent a boat in the middle of the Vistula.
    • You can rotate it, change the time of day, add snow. A painted map can’t do that.
    • It runs on my MacBook. No GPU rental, no API bills.

    And Warsaw turned out to be the perfect choice for another reason: Polish open data.

    Poland gives away an incredible amount of data

    I didn’t know this before: GUGiK, the Polish surveying office, publishes most of its data for free, much of it under CC0. Everything on the map comes from free sources:

    • OpenStreetMap for streets, buildings, water, parks, parking, street lamps, traffic lights and names.
    • GUGiK’s 3D building models (LoD2) with real roof shapes: 131,686 buildings in Warsaw.
    • GUGiK’s terrain model from LiDAR scans, at 1 m resolution. This is what puts the Old Town on top of the Vistula escarpment.
    • GUGiK’s orthophoto, which we used to sample the real colour of each roof.
    • GUGiK’s 3D tree models: 1.93 million individual trees with their height. The download was 8.5 GB; we read it as a stream and deleted it afterwards.
    • ZTM Warsaw and PKP timetables (via the GTFS feeds by Mikołaj Kuranowski) for the trams and trains.

    The whole city is split into 659 squares of 1 km. Your browser only loads the squares you are looking at.

    How I worked: many agents, one art director

    I used Claude Code as my engineer. But not as one assistant: most of the time six to eight AI agents were working in parallel, each on its own copy of the project. One was parsing the 3D buildings, one was downloading the orthophoto, one was modelling the Palace of Culture, one was building the trams, one was expanding the map to the whole city.

    My job was something like an art director. I looked at screenshots and said what was wrong. A lot of the work was exactly that: “this bridge looks absurd”, “the road shouldn’t touch the ground here”, “the Old Town is supposed to be up on the hill”, “the Palace of Culture is not detailed enough, look at high-resolution photos”.

    The agents always took screenshots of their own work and judged it before reporting back. Still, things went wrong. At one point an agent temporarily reverted a file to take a “before” screenshot and wiped another agent’s unsaved work. The map stopped loading while I was looking at it. After that, every agent got its own separate copy of the code, and work was merged only when it was finished and checked.

    The city is not flat

    For the first day everything was on a flat plane, and the Old Town looked wrong. Trasa W-Z seemed to come out of a building in the middle of Plac Zamkowy. In reality Plac Zamkowy is about 18 metres above the road below. The road goes under the square and comes out of the escarpment.

    Once we added the terrain model, the Old Town moved up onto its hill, Powiśle went down to the river, and Stadion Narodowy now sits on the embankment of the old Stadion Dziesięciolecia.

    The bridges were the hardest part. The terrain data is “bare earth”: under a viaduct it contains the street below, not the bridge. So at first every long bridge sagged into the ground. We ended up writing a small bridge solver: decks span between their ends, keep at least 5 m above roads, 6.5 m above railways and 7.5 m above the river, and never sag. An automatic scan for broken bridges went from about 280 problems to 16.

    Landmarks, built by hand (well, by agents)

    Ordinary buildings come from data. But some places deserve more. For about 240 of them, agents built custom models from photos on Wikimedia Commons. Every one of them can be clicked for a short card with its history, height, year and architect.

    The Palace of Culture got its pinnacles, the four clock faces and the gilded spire. Both stadiums are there: PGE Narodowy with its red and white woven façade and the needle in the middle of the roof, and Legia’s stadium on Łazienkowska with the old 1930 grandstand façade kept on the street side. At night their floodlights and façades light up.

    Chopin Airport and the sky above the city

    Lotnisko Chopina has its real runways, taxiways and stands from OpenStreetMap, the wavy roof of Terminal A, the jet bridges and the control tower. Around 370 flights a day land and take off, about one every two minutes at the busiest hours. The runway in use is picked by the “wind” of the day, so you will see planes coming in low over Ursynów or climbing out over Włochy, even when you are looking at another part of the city. At night only their navigation lights and strobes are visible.

    The small airfield at Babice in Bemowo is there too, with small planes flying circuits, gliders towed into the air on fine days and the air ambulance helicopter.

    Old forts and old factories

    Warsaw was a fortress city in the 19th century, and most of the ring of forts still exists. The Citadel is modelled with its gates, bastions and the new Museum of Polish History. Nineteen forts around the city, like Fort Bema, Fort Mokotów and Fort Czerniaków, show their ramparts and moats, which were already in the terrain data, so we only had to add the grass, the brick casemates and the trees.

    Then there are the old factories that became the city’s favourite places to eat and meet: Elektrownia Powiśle, Fabryka Norblina, Koneser with its brick chimney, Browary Warszawskie, Hala Koszyki and the round gasholders in Wola.

    My favourite small detail is on Piłsudski Square: the Tomb of the Unknown Soldier with its eternal flame, which flickers in the map, and two honour guards standing next to it.

    Parks, ducks and peacocks

    Warsaw is a very green city, and the parks got their own models. In Łazienki there is the Palace on the Isle with its colonnades and statues, the amphitheatre on the island, the Chopin Monument and the Orangeries. Peacocks walk on the lawns near the palace (some of them showing their tail), carp swim in the pond by the palace, and red squirrels run between the trees.

    Skaryszewski Park in Praga has its lake with swans and ducks, the rose garden and the art deco sculptures. Pole Mokotowskie, Morskie Oko and the parks in Mokotów each have their own character. And the lake in Park nad Balatonem in Gocław has the biggest flock of all, more than a hundred ducks, plus swans and coots.

    The animals follow the clock and the seasons too. Peacocks stay in their aviary in winter. When the ponds freeze, fewer ducks are out and more of them rest on the bank.

    Trams and trains

    Trams were non-negotiable. They are Warsaw. All 26 lines run on their real routes, with the frequencies from the ZTM timetable for each hour of the day, weekdays and weekends. The yellow and red Pesa Jazz and Swing trams bend at their joints in curves, and the old Konstal 105Na sets still run on some lines. Trams stop at the stops, slow down in curves, wait for each other and turn around in the loops at the end of the line. They cross Most Poniatowskiego at deck height and disappear into the tunnel under Plac Zamkowy. At night their windows and headlights are on.

    Trains run on the real timetables too: SKM, Koleje Mazowieckie, WKD and Intercity, more than 1,600 trips on a weekday. They stop at the right platform, wait longer at Centralna, Wschodnia and Zachodnia, and slide into the cross-city tunnel. There are freight trains as well, mostly at night.

    I decided against moving cars and buses. They would get mixed up with the trams and make the map too busy. Instead there are about 600,000 parked cars, and they follow the time of day: housing estates are full at night, offices are full on weekdays, and shopping centre car parks are almost empty on Sundays, because shops in Poland are closed.

    Roads, cycle paths and street lamps

    In the first versions the roads were plain grey bands. Now they are drawn from the OpenStreetMap tags, without guessing: the width comes from the number of lanes, dual carriageways get a median, and 22,300 roads get their centre lines, lane dividers and edge lines. There are 23,000 zebra crossings, stop lines at traffic lights, and turn arrows near the junctions.

    Warsaw has a lot of cycle paths, and they are drawn in the red asphalt they really have. Roads with painted cycle lanes get a red band on the side.

    6,700 traffic lights stand at their stop lines, facing the traffic. Guard rails, concrete barriers and the noise barriers along the S2 and S8 expressways are built along their mapped lines. And at night the 46,873 street lamps light the roads with warm pools of light.

    The Vistula rises and falls

    This is the part I am most proud of. The river is not just a blue shape: its level changes with the date. It follows the real monthly averages at the Warszawa-Bulwary gauge, high in March and April when the snow melts, low at the end of summer.

    This autumn the Vistula is close to its record low, and that is what the map shows by default. Sandbars and wide beaches appear on the Praga side. You can also move a slider to set the level yourself, all the way up to a flood, when the beaches and the low boulevards disappear under brown water.

    What the river hides

    In 2025 the water was so low that the remains of old bridges came out of the river, and archaeologists counted hundreds of wooden piles. So we put them on the map. When the level drops below their height, the tops of the piles appear first, then more of them: near Bednarska, where some piles come from the 18th-century Most Ponińskiego, the piles of a temporary bridge from 1945, the 1945 railway bridge piles near Most Gdański, and a probable shipwreck near ulica Wilanowska. Each of them has an info card, and the ones whose position is only estimated say so.

    Rowing clubs and boats

    The rowing and canoe clubs along the river are there, with their boathouses and landing stages: WTW, the oldest rowing club in Warsaw, Port Czerniakowski, Port Praski and others. On summer mornings and evenings you will see single sculls and eights with their coach boat, kayaks in small groups, a few motorboats, and a couple of times a day the tourist boat leaving from the boulevards. Nobody is out at night, in winter or during a flood.

    The real sun, the seasons and the night

    You can pick any date and time, and the sun is where it really is over Warsaw. The shadows fall in the right direction and have the right length: short at noon in June, long in December, pointing west in the morning and east in the evening.

    The map also follows the seasons. In winter there is snow on the roofs and the parks, the trees are bare and the ponds freeze. In April some trees blossom. In October the parks turn yellow, orange and red, while the conifers stay green.

    At night windows light up and 46,873 street lamps come on, all at their real positions from OpenStreetMap. This is my favourite view.

    How to explore the map

    On a computer:

    • Drag with the mouse, or hold W A S D or the arrow keys to move around.
    • Scroll, or press + and −, to zoom in and out.
    • Hold Q or E, drag with the right mouse button or with Shift, or swipe sideways on a trackpad to rotate the city.
    • G snaps the view back to the classic isometric angles.
    • I opens the info panel with all data sources, Esc closes it.
    • Click a landmark to open its card. Right-click without moving to save the current view as a picture.
    • The sun panel in the top right corner switches between the artistic light and the real sun, and lets you choose the date, the time, the season and the water level of the Vistula.

    On a phone: drag with one finger, pinch to zoom, turn with two fingers, double-tap to zoom in, and long-press to save a picture.

    Making it fast enough for a phone

    At first the whole city was a lot of data. The first version took 7.6 seconds to show the centre on a fast 4G connection; the whole city took 45 seconds. We packed the data into a compact binary format, compressed it with Brotli, loaded the squares under the screen first and everything else later. Now the centre appears in about 1.8 seconds on desktop and 1.1 seconds on an iPhone-sized screen.

    It also works with touch: one finger to pan, pinch to zoom, two fingers to rotate.

    Putting it online

    My website runs on WordPress at Hostinger. The map is just a folder of static files next to WordPress, so WordPress never even sees those requests. Even the deployment had its own little drama: the server sent the JavaScript files with the wrong type, so the browser refused to run them. One line in an .htaccess file later, it worked.

    What I learned

    • You don’t always need an image model to get a hand-made look. Good data and a strict pixel-art renderer go a long way, and they are free.
    • Open data is a superpower. Poland’s GUGiK data made this possible. Without it, the roofs, the terrain and the trees would all be guesses.
    • Look at the result, not the report. Agents are good at saying “done”. The real test was always a screenshot.
    • Say what you don’t want. No invented details, no brand logos, nothing that is not in the data. Saying this clearly mattered as much as saying what I wanted.

    Try it

    The map is at bedirhanyildirim.com/warsaw-izo. Right-click (or long-press on a phone) to save the current view as a picture. Press the ⓘ button for all data sources.

    If you find a bridge that looks absurd or a landmark that deserves more detail, tell me on social media. There is always one more thing to add.

  • Finding the best Burger in Warsaw: Bedo’s Burger Index

    Finding the best Burger in Warsaw: Bedo’s Burger Index

    First review:

    Last review:

    I am on a mission with my wife to find the best burger in Warsaw!

    Me an my wife lived in Krakow for 3 years and we had our favourite places. After we moved to Warsaw in 2025 summer, we started to discover new places.

    In this article I will be writing about the burger places we tried in Warsaw. I will create my own ranking criterias and we will try find a burger as good as our favouire smashed burger place in Krakow: M22

    To make things more fun and fair, I created my own rating system called Bedo’s Burger Index. It is not only about the taste, it also considers the vibe of the place, how easy it is to eat the burger, whether it is Instagram-worthy, and if the price makes sense. In the end I will share my “Last Decision” with the wow factor and answer the real question: is this a burger I would actually want to come back for?

    Based on my Google Maps search and recommendations from friends, I made a list of burger spots in Warsaw that I want to try. These are the starting points of my burger journey. If you know any other places worth visiting, feel free to reach out to me on social media and share your suggestions.


    Burgerlab Warsaw

    For our first stop in Warsaw, my wife and I visited Burgerlab in late August. We went there in the afternoon, just before sunset, for an early dinner. The location is great: after the meal we walked towards the Palace of Culture and Science, which made the whole experience feel like part of a city walk.

    The street where Burgerlab is located allows for parking along the road. On weekdays it is paid, you need to buy a ticket from the machine, but on weekends it is free. This makes it relatively easy to leave your car nearby without much trouble. Right next to the restaurant you can also find the Museum of Life under Communism, so you could easily plan a small flow of museum + burger + evening walk around the city.

    We ordered two burgers (the Oklahoma and a Cheeseburger) along with Parmesan fries. The service is professional: they take your order at the table and bring everything directly to you. As soon as you sit down, they serve a free glass of water. Menus are available in Polish, English, Russian, and Ukrainian, and you access them by scanning a QR code.

    We sat inside, where there is also a lower floor available for guests. The space felt clean and comfortable, and the toilets were well maintained. There is also plenty of outdoor seating, which makes the place flexible depending on the weather. The restaurant is spacious enough to handle even larger groups, and when we visited it was not crowded at all.

    The menu is strictly focused on burgers, so you will not find other dishes here. The music plays rave-style beats and creates an underground club-like vibe. For people who enjoy that energy it might feel cool and different, but personally I did not find it very comfortable and it slightly took away from the cozy dinner feeling.

    🍽️ Burger Tasting

    We ordered two burgers. I had the Oklahoma Burger and my wife had the Cheeseburger. We also ordered Parmesan fries and shared everything to try both. The Parmesan fries were a success. The burgers were presented nicely and everything felt clean and as it should be. There was nothing extreme or disappointing, just solid execution across the board.

    Personally, I am not a fan of tomato in a burger, which was included in the Cheeseburger. It makes the bun soggy and takes away from the cheese flavor. Aside from that, both burgers delivered the taste you would expect, but they did not bring that wow moment either.

    Overall, Burgerlab feels reliable: a clean place with okay flavors where you can enjoy a burger with confidence. It is not the kind of taste you crave later or go back for, but if we wanted a safe spot for a good burger in Warsaw, we could definitely return.

    The only downside for us was the pricing. Even considering Warsaw and the central location, it felt expensive: the Oklahoma Burger was 48 PLN, the Cheeseburger was 48 PLN, and the Parmesan fries were 19 PLN.

    🍔 Bedo’s Burger Index: Burgerlab

    • Venue Type: Burger Restaurant
    • Atmosphere & Vibes: Clean, professional, spacious, smooth service, underground, rave music, no reservation needed, not crowded when we visited
    • Social Fit: Date, Friends, Colleagues, Solo, Big Group
    • Seating & Space: Indoor, outdoor, big tables
    • Messiness Level: No mess on clothes or face, hands greasy but manageable, not disturbing
    • Instagrammable Factor: Visually appealing, good for photos, photogenic interior
    • Service Extras: Free water, cutlery provided, napkins, no gloves by default (maybe on request, not sure)
    • Menu & Signature Items: Only burgers, classics plus variations like Oklahoma, vegan patty option, gluten-free bun option, Parmesan fries
    • Price vs. Value: Expensive, 48 PLN per burger feels high
    • Aftertaste Factor: Balanced, not heavy or greasy
    • ⭐ Wow Effect: No wow effect, taste not memorable enough to crave again. Would return only as a safe choice for a clean and reliable burger spot.

    BykBar – steak & burger

    We recently visited BykBar – Steak & Burger with my wife. It is a nice and cozy place, neither too small nor too large, with around ten tables inside. We went there on December 6, and almost every table was occupied by couples, which immediately gave the place a date-oriented atmosphere.

    Because of that, I would say it is a good spot for a date. It works well if you want to take your partner, whether that is your girlfriend, boyfriend, wife, or husband, somewhere calm and comfortable. At the same time, it also feels suitable for friends or family. The place was not noisy at all. Surprisingly, it was actually quite quiet, which was a positive thing for us. For larger groups, though, seating might be a challenge. Anything above six people could be difficult to arrange.

    🍽️ Burger Tasting

    The service speed felt normal, and all dishes arrived at the table at the same time. The menu is focused on burgers and steaks, with some starters and desserts available as well. I ordered the Double Cheese Smash, while my wife went for the BBQ Burger. All burgers on the menu can be ordered with beef, chicken, or a vegan patty. Fries are ordered separately, not included by default. We ordered one portion of fries and also tried the fried mozzarella balls, which came as eight pieces.

    For dessert, we shared a Chocolate Fondant, served with warm Belgian chocolate, and a Ricotta Cheesecake. The desserts were average overall. They were fine, but nothing memorable, and compared to the burgers they felt weaker. Considering the taste, the dessert prices felt high, and if we visit again, we would probably skip dessert next time. For reference, the Ricotta Cheesecake was 25 PLN and the Chocolate Fondant was 27 PLN.

    Burger prices were more reasonable in comparison. The BBQ Burger was 38 PLN, while the Double Cheese Smash was 49 PLN. Overall, we were happy with the experience, and if we were in the area again, we would most likely come back.

    The toilets were clean, and instead of paper towels, cloth hand towels were provided, which is always a nice detail. Reservations are possible and recommended. At the very least, it makes sense to call ahead and check availability before going. Alcohol is available, although we ordered tea instead since we felt cold that day.

    One thing worth keeping in mind is the location. BykBar is quite close to the Legia Warsaw stadium, so before and after match times there could be extra crowd and traffic around the area.

    🍔 Bedo’s Burger Index – BykBar

    • Venue Type: Restaurant
    • Atmosphere & Vibes: Cosy, friendly, clean
    • Social Fit: Date, Friends, Family, Colleagues, Solo
    • Seating & Space: Indoor, small space
    • Messiness Level: Manageable, hands and mouth needed washing after finishing, not messy during eating
    • Instagrammable Factor: Photogenic, nice plating, Instagrammable
    • Service Extras: Napkins, cutlery provided, no gloves asked for, real cloth towels in the restroom
    • Menu & Signature Items: Burgers and steaks only
    • Price vs. Value: Burger prices reasonable for the location, desserts expensive for the taste, better desserts available elsewhere for less
    • Aftertaste Factor: Balanced, no heaviness, no sharp grill taste, not smoky, clean finish
    • ⭐ Last Decision (Wow Effect): Would go again, but no wow effect. A safe choice for a clean and reliable burger. Not something I would randomly crave, especially with many other burger places still on my list.

    Suggest & Offer

    If you believe you already found the best burger in Warsaw or maybe you are making it, you can text me on my instagram (@bedcodes) and I will try that burger!