<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: typical pawel</title>
    <description>The latest articles on DEV Community by typical pawel (@paweldotio).</description>
    <link>https://dev.to/paweldotio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F763730%2Ff30a1cbf-5e77-4d27-af33-cb851ccaff60.jpeg</url>
      <title>DEV Community: typical pawel</title>
      <link>https://dev.to/paweldotio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/paweldotio"/>
    <language>en</language>
    <item>
      <title>How We Built a Free Browser-Based Screen Recorder</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Sat, 04 Apr 2026 15:30:33 +0000</pubDate>
      <link>https://dev.to/paweldotio/how-we-built-a-free-browser-based-screen-recorder-4m04</link>
      <guid>https://dev.to/paweldotio/how-we-built-a-free-browser-based-screen-recorder-4m04</guid>
      <description>&lt;p&gt;At Flat.social, we build tools for remote teams to connect, collaborate, and have fun together. Our platform already handles real-time video, spatial audio, and interactive games for virtual offices and events. So when we decided to add a &lt;a href="https://flat.social/tools/free-online-screenrecorder" rel="noopener noreferrer"&gt;free screen recorder&lt;/a&gt; to our toolkit, we had a head start on working with browser media APIs. But building a screen recorder that feels polished, works reliably across browsers, and never touches a server turned out to be a deeper engineering challenge than we expected.&lt;/p&gt;

&lt;p&gt;This article walks through the technical decisions we made, the browser APIs we used, and the problems we solved along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Build a Screen Recorder?
&lt;/h2&gt;

&lt;p&gt;Our users already use Flat.social for &lt;a href="https://flat.social/use-cases/remote-team-collaboration-tool" rel="noopener noreferrer"&gt;remote team collaboration&lt;/a&gt;, &lt;a href="https://flat.social/use-cases/online-brainstorming" rel="noopener noreferrer"&gt;online brainstorming&lt;/a&gt;, and running &lt;a href="https://flat.social/use-cases/virtual-workplace" rel="noopener noreferrer"&gt;virtual workplaces&lt;/a&gt;. A common request we kept hearing was: "Can I record what's happening on my screen to share with teammates who couldn't make it?" People wanted to capture product demos, walkthroughs, and async updates without installing desktop software or signing up for yet another SaaS tool.&lt;/p&gt;

&lt;p&gt;We also noticed that many existing free screen recorders come with strings attached. Some upload your video to their servers. Others slap a watermark on your recording or limit you to five minutes. We wanted something different: a tool that runs entirely in the browser, saves locally to the user's device, and has zero limits. No account, no cloud, no watermark.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Architecture
&lt;/h2&gt;

&lt;p&gt;The screen recorder is built on three browser APIs that do most of the heavy lifting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screen Capture API (getDisplayMedia)&lt;/strong&gt; lets us request access to the user's screen, a specific application window, or a single browser tab. This is the same API that powers screen sharing in video conferencing tools like Zoom and Google Meet. When the user clicks "Start Recording," the browser shows its native picker dialog, and once the user selects a source, we get a MediaStream containing the screen's video track.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;getUserMedia&lt;/strong&gt; handles the webcam and microphone. We request camera and audio access separately from the screen capture, which gives us independent control over each stream. The user can toggle the webcam and microphone on or off at any point during the recording without interrupting the screen capture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MediaRecorder API&lt;/strong&gt; takes a combined MediaStream and encodes it into a video file in real time. We record in WebM format using the VP8 or VP9 codec, depending on what the browser supports. The MediaRecorder fires data events as it encodes, and we collect these chunks in memory. When the user stops recording, we assemble the chunks into a Blob and offer it as a download.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hard Part: Webcam Compositing
&lt;/h2&gt;

&lt;p&gt;The trickiest part of the entire project was the webcam overlay. We wanted the user's face to appear as a circular bubble in the corner of the recording, baked directly into the video file, just like Loom does it. This sounds simple, but the browser does not give you a built-in way to composite two video streams into one.&lt;/p&gt;

&lt;p&gt;Our solution uses an off-screen canvas element. On every animation frame, we draw the current screen capture frame onto the canvas, then draw the webcam frame on top of it in a circular clip region. The canvas runs at the same frame rate as the screen capture, so the result looks smooth and natural.&lt;/p&gt;

&lt;p&gt;We then call &lt;code&gt;canvas.captureStream()&lt;/code&gt; to turn the canvas output into a new MediaStream. This composited stream is what we pass to the MediaRecorder, not the raw screen capture. The result is a single video file where the webcam bubble is permanently part of the recording.&lt;/p&gt;

&lt;p&gt;Getting this to perform well took some iteration. Early versions caused frame drops on older machines because drawing two video sources onto a canvas sixty times per second is CPU-intensive. We optimized by matching the canvas resolution to the actual screen capture resolution instead of using a fixed high resolution, and by using &lt;code&gt;requestAnimationFrame&lt;/code&gt; instead of &lt;code&gt;setInterval&lt;/code&gt; to stay in sync with the browser's render loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixing Audio Streams
&lt;/h2&gt;

&lt;p&gt;Audio presented its own set of challenges. The screen capture can optionally include system audio (the sounds coming from the user's computer), and the microphone provides a separate audio track. We needed to mix these two audio sources into a single track for the final recording.&lt;/p&gt;

&lt;p&gt;We use the Web Audio API to handle this. Each audio source is connected to a MediaStreamSource node, and both sources feed into a single destination node. The destination node outputs a mixed audio stream that we combine with the composited video stream before passing everything to the MediaRecorder.&lt;/p&gt;

&lt;p&gt;One gotcha we ran into: system audio capture is only available in Chrome and Edge, and only when the user shares a browser tab or entire screen (not a specific application window). Firefox does not support system audio capture at all. We detect these capabilities at runtime and show or hide the system audio toggle accordingly, so the UI never offers something the browser cannot deliver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Draggable Webcam Bubble
&lt;/h2&gt;

&lt;p&gt;We wanted the webcam bubble to be repositionable. The user should be able to drag it to any corner or edge of the preview before or during recording. Since the bubble's position on the preview needs to map exactly to its position in the final recording, we calculate the bubble's coordinates as percentages of the canvas dimensions rather than pixel values. This means the bubble position is resolution-independent and always lands in the right spot in the output file.&lt;/p&gt;

&lt;p&gt;The drag interaction itself uses pointer events with a simple offset calculation to keep the bubble anchored to where the user grabbed it, preventing the annoying "jump to center" behavior that naive drag implementations often have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy by Architecture
&lt;/h2&gt;

&lt;p&gt;Privacy was not an afterthought. It was a design constraint from the start. The entire recording pipeline runs in the browser's main thread and a compositing loop. No data is sent to any server at any point. There is no upload endpoint, no analytics on the video content, and no account system.&lt;/p&gt;

&lt;p&gt;When the user clicks download, we create a Blob URL from the in-memory video data and trigger a download through an anchor element. The video goes straight from browser memory to the user's filesystem. When the user closes the tab, all data is gone.&lt;/p&gt;

&lt;p&gt;This architecture also means we have zero infrastructure cost for the screen recorder. There are no video processing servers, no storage buckets, and no CDN bandwidth. It scales to a million users the same way it scales to one, because each user's browser does all the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Countdown and UX Polish
&lt;/h2&gt;

&lt;p&gt;Small details matter for recording tools. We added a 3-2-1 countdown before the recording starts, giving the user time to switch windows or prepare their screen. Without it, the first few seconds of every recording would be the user fumbling to get to the right place.&lt;/p&gt;

&lt;p&gt;We also built an instant preview that plays the recording back as soon as the user stops it. This lets people verify the content before downloading, which saves the frustrating cycle of record, download, open file, realize you missed something, and start over.&lt;/p&gt;

&lt;p&gt;The recording controls float in a minimal toolbar that stays visible during recording without being distracting. The user can see the elapsed time, toggle the webcam and microphone, and stop the recording with a single click.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser Compatibility and Edge Cases
&lt;/h2&gt;

&lt;p&gt;Browser compatibility is where things get messy. Chrome and Edge provide the most complete support for the APIs we use, including system audio capture and all screen sharing modes. Firefox supports screen capture and MediaRecorder but lacks system audio. Safari has limited and inconsistent support for getDisplayMedia, so we recommend Chrome for the best experience.&lt;/p&gt;

&lt;p&gt;We also had to handle a surprising number of edge cases. What happens if the user revokes screen sharing permission mid-recording? The screen capture track fires an "ended" event, and we gracefully stop the recording and present whatever was captured up to that point. What if the webcam disconnects? We detect the lost track and continue recording without the overlay rather than crashing the entire session.&lt;/p&gt;

&lt;p&gt;macOS adds another layer of complexity. Users need to grant Screen Recording permission at the OS level (System Settings, Privacy and Security, Screen Recording) in addition to the browser-level permission. If this permission is not granted, the browser returns a blank or black screen capture. We detect this scenario and show a clear message explaining what to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Learned
&lt;/h2&gt;

&lt;p&gt;Building this tool reinforced a few things we already believed and taught us some new lessons.&lt;/p&gt;

&lt;p&gt;First, browser APIs are more capable than most people realize. Five years ago, building a screen recorder with webcam compositing would have required a desktop application or at least a browser extension. Today, it works with vanilla web APIs and no dependencies.&lt;/p&gt;

&lt;p&gt;Second, privacy-first architecture can also be the simplest architecture. By keeping everything local, we avoided building video processing pipelines, managing storage, handling uploads over flaky connections, and dealing with GDPR compliance for video data. The simplest solution was also the most private one.&lt;/p&gt;

&lt;p&gt;Third, the Web Audio API is powerful but full of gotchas. Mixing audio streams, handling different sample rates, and dealing with browser-specific quirks in audio capture took more time than we expected.&lt;/p&gt;

&lt;p&gt;The screen recorder now sits alongside our other free tools like the &lt;a href="https://flat.social/tools/dice-roller" rel="noopener noreferrer"&gt;online dice roller&lt;/a&gt;, and it complements our core platform features for teams that need async communication alongside their real-time collaboration spaces. Whether your team uses Flat.social for a &lt;a href="https://flat.social/use-cases/virtual-calming-room" rel="noopener noreferrer"&gt;virtual calming room&lt;/a&gt; between intense work sessions or as a full &lt;a href="https://flat.social/use-cases/virtual-workplace" rel="noopener noreferrer"&gt;virtual workplace&lt;/a&gt;, the screen recorder is there when you need to capture and share what is happening on your screen.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://flat.social/tools/free-online-screenrecorder" rel="noopener noreferrer"&gt;try the screen recorder for free&lt;/a&gt;. No download, no sign-up, no watermark.&lt;/p&gt;

</description>
      <category>mediakit</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Virtual Conferences Still Feel Broken (And What Actually Fixes Them)</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Fri, 03 Apr 2026 14:44:34 +0000</pubDate>
      <link>https://dev.to/paweldotio/why-virtual-conferences-still-feel-broken-and-what-actually-fixes-them-5aml</link>
      <guid>https://dev.to/paweldotio/why-virtual-conferences-still-feel-broken-and-what-actually-fixes-them-5aml</guid>
      <description>&lt;h1&gt;
  
  
  Why Virtual Conferences Still Feel Broken (And What Actually Fixes Them)
&lt;/h1&gt;

&lt;p&gt;Virtual events were supposed to democratize conferences. Anyone with a laptop and an internet connection could attend a keynote in San Francisco, a panel in London, or a networking session in Tokyo. No flights, no hotels, no $2,000 tickets.&lt;/p&gt;

&lt;p&gt;Six years after the remote work boom, that promise is only half-delivered. The technology works. The experience doesn't.&lt;/p&gt;

&lt;p&gt;Most virtual conferences still follow the same formula: a speaker shares their screen, attendees watch in silence, and the chat scrolls too fast for anyone to have a real conversation. It's a webinar with a fancier registration page. And attendees have noticed. Drop-off rates after the first session regularly hit 60-70%.&lt;/p&gt;

&lt;p&gt;But the problem isn't virtual events themselves. It's the tools we're using to run them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Webinar Trap
&lt;/h2&gt;

&lt;p&gt;Here's what typically happens when an organization decides to host a virtual conference. Someone on the events team opens Zoom or Microsoft Teams, because that's what the company already pays for. They schedule a series of meetings, call them "sessions," and add a shared Google Doc for networking.&lt;/p&gt;

&lt;p&gt;It's understandable. If your team already knows &lt;a href="https://flat.social/guides/how-to-use-microsoft-teams" rel="noopener noreferrer"&gt;how to use Microsoft Teams&lt;/a&gt; for daily standups, why learn a new platform for a quarterly conference? The learning curve is zero, the budget is zero, and IT won't push back.&lt;/p&gt;

&lt;p&gt;The problem is that video conferencing tools and virtual conference platforms solve fundamentally different problems. Zoom is built for meetings. Structured, agenda-driven, one-conversation-at-a-time interactions. A conference is the opposite. It's dozens of conversations happening simultaneously. It's bumping into someone at the coffee station and discovering you're working on the same problem. It's ducking out of a session that isn't relevant and wandering into one that is.&lt;/p&gt;

&lt;p&gt;When you force a conference into a video call, you strip out everything that makes conferences valuable and keep only the part people like least: sitting and watching.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed in 2026
&lt;/h2&gt;

&lt;p&gt;The virtual events market has matured significantly. A new generation of &lt;a href="https://flat.social/blog/best-virtual-conference-platforms" rel="noopener noreferrer"&gt;virtual conference platforms&lt;/a&gt; has emerged that treats online events as spatial experiences rather than video streams.&lt;/p&gt;

&lt;p&gt;The biggest shift is spatial audio, technology where sound behaves like it does in a physical room. Walk your avatar closer to a group and their conversation gets louder. Step away and it fades. This single feature transforms the dynamics of a virtual event because it allows the thing that makes in-person conferences magic: spontaneous, unscheduled conversation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/spatial-chatting" rel="noopener noreferrer"&gt;Spatial chatting&lt;/a&gt; recreates the conference hallway. Instead of being locked in a breakout room with four strangers and an awkward countdown timer, attendees move freely through a virtual venue. They see clusters of people talking, walk over, listen in, and join if the topic interests them. It's the closest thing to a real conference floor that exists online.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Remote Work Connection
&lt;/h2&gt;

&lt;p&gt;This matters more than ever because of where work itself is heading. Research shows a fascinating &lt;a href="https://flat.social/blog/remote-work-paradox" rel="noopener noreferrer"&gt;remote work paradox&lt;/a&gt;: remote employees report higher productivity but lower sense of connection. They get more done in isolation, but they miss the serendipity of shared physical spaces.&lt;/p&gt;

&lt;p&gt;Virtual conferences are one of the few opportunities to rebuild that serendipity at scale. When a distributed team of 200 people comes together in a spatial virtual venue for an annual summit, the hallway conversations and chance encounters that happen between sessions can strengthen working relationships for months afterward.&lt;/p&gt;

&lt;p&gt;But this only works if the platform supports it. A day of back-to-back Zoom presentations doesn't build connection. It deepens the isolation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right Tool for the Job
&lt;/h2&gt;

&lt;p&gt;The good news is that organizations have real options now. The choice depends on what kind of event you're running and what outcome matters most.&lt;/p&gt;

&lt;p&gt;For teams deciding between mainstream tools, understanding the tradeoffs is step one. The &lt;a href="https://flat.social/blog/google-meet-vs-zoom" rel="noopener noreferrer"&gt;Google Meet vs. Zoom comparison&lt;/a&gt; is one most event planners start with, since these are the default options in most organizations. Both work well for standard meetings. Neither was designed for multi-track conferences with networking components.&lt;/p&gt;

&lt;p&gt;For budget-conscious teams, there are strong &lt;a href="https://flat.social/blog/free-alternatives-to-zoom" rel="noopener noreferrer"&gt;free alternatives to Zoom&lt;/a&gt; that include features like breakout rooms and larger participant limits. These can work for smaller events, particularly internal team gatherings where the stakes are lower.&lt;/p&gt;

&lt;p&gt;For educational institutions, the overlap between virtual conferences and online learning has produced specialized &lt;a href="https://flat.social/blog/virtual-classroom-tools-2026" rel="noopener noreferrer"&gt;virtual classroom tools&lt;/a&gt; that handle both use cases. Teaching sessions with interactive elements, plus social spaces for student networking and collaboration.&lt;/p&gt;

&lt;p&gt;And for organizations looking further ahead, &lt;a href="https://flat.social/metaverse-resources" rel="noopener noreferrer"&gt;metaverse and virtual world platforms&lt;/a&gt; are pushing the boundaries of what online gatherings can feel like. Persistent 3D environments where the line between "conference" and "community" starts to blur.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Matters
&lt;/h2&gt;

&lt;p&gt;After attending dozens of virtual conferences across every platform category, the pattern is clear. The technology that makes the biggest difference isn't higher video resolution or better screen sharing. It's anything that gives attendees agency. The ability to move, choose, explore, and connect on their own terms.&lt;/p&gt;

&lt;p&gt;The conferences people remember aren't the ones with the best keynotes. They're the ones where they met someone unexpected. Where a hallway conversation turned into a partnership, or a casual chat at a virtual booth led to their next job.&lt;/p&gt;

&lt;p&gt;The next time you're planning a virtual event, don't start by asking "which video tool should we use?" Start by asking "what do we want attendees to &lt;em&gt;do&lt;/em&gt; between sessions?" If the answer is "wait for the next talk," any platform will work. If the answer is "meet people, explore ideas, and build relationships," you need a tool that was designed for exactly that.&lt;/p&gt;

&lt;p&gt;The technology exists. The question is whether we'll use it.&lt;/p&gt;

</description>
      <category>remote</category>
      <category>workplace</category>
      <category>wfh</category>
    </item>
    <item>
      <title>How I Built a Virtual Office Platform From Scratch With Claude, LiveKit, and Next.js</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Thu, 02 Apr 2026 14:58:33 +0000</pubDate>
      <link>https://dev.to/paweldotio/how-i-built-a-virtual-office-platform-from-scratch-with-claude-livekit-and-nextjs-5ddl</link>
      <guid>https://dev.to/paweldotio/how-i-built-a-virtual-office-platform-from-scratch-with-claude-livekit-and-nextjs-5ddl</guid>
      <description>&lt;p&gt;Picture this. You're on your third Zoom call before lunch. Someone shares their screen. Half the team is on mute. The other half has cameras off. The meeting could have been a Slack message, but here you are, staring at a grid of rectangles.&lt;/p&gt;

&lt;p&gt;This is the moment that made me start building &lt;a href="https://flat.social" rel="noopener noreferrer"&gt;Flat.social&lt;/a&gt;. I wanted to create something that feels nothing like a video call. A spatial world where avatars walk around, conversations happen based on proximity, and remote teams actually feel like they're in the same room.&lt;/p&gt;

&lt;p&gt;Flat.social is in beta right now, coming soon. I can't wait to show you what it looks like.&lt;/p&gt;

&lt;p&gt;But first, the story of how one developer is building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Video Tool Has the Same Problem
&lt;/h2&gt;

&lt;p&gt;Before writing a single line of code, I did my homework. I dug through &lt;a href="https://flat.social/guides/zoom-pricing" rel="noopener noreferrer"&gt;Zoom pricing plans&lt;/a&gt; to understand what teams were paying for. I studied comparisons like &lt;a href="https://flat.social/blog/google-meet-vs-zoom" rel="noopener noreferrer"&gt;Google Meet vs Zoom&lt;/a&gt; to see what people cared about. I tested a long list of &lt;a href="https://flat.social/blog/free-alternatives-to-zoom" rel="noopener noreferrer"&gt;free alternatives to Zoom&lt;/a&gt; to find what was missing.&lt;/p&gt;

&lt;p&gt;The answer was always the same thing. Every tool optimized for structured meetings. None of them solved for the moments between meetings. The spontaneous conversation. The quick whiteboard sketch. The Friday afternoon hangout where people actually relax together.&lt;/p&gt;

&lt;p&gt;That's the &lt;a href="https://flat.social/spatial-virtual-office" rel="noopener noreferrer"&gt;virtual workplace&lt;/a&gt; I set out to build. One where the informal stuff isn't an afterthought.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Frontend: Next.js and shadcn/ui
&lt;/h2&gt;

&lt;p&gt;Next.js was the natural pick. Half of Flat.social is a content-heavy marketing site with pages like our &lt;a href="https://flat.social/blog/best-internal-communication-tools" rel="noopener noreferrer"&gt;best internal communication tools&lt;/a&gt; roundup. The other half is a real-time interactive application with avatars, spatial audio, and live collaboration. Server components handle the first part. Client components handle the second. One framework, no compromises.&lt;/p&gt;

&lt;p&gt;For the interface itself, I went with shadcn/ui. Full ownership of every component without starting from zero. Radix primitives underneath, Tailwind for styling, and a consistent system I could extend as the product grew.&lt;/p&gt;

&lt;p&gt;That consistency paid off when I built the &lt;a href="https://flat.social/use-cases/online-brainstorming" rel="noopener noreferrer"&gt;online brainstorming&lt;/a&gt; canvas. Teams can jump into a shared space and throw ideas around visually. Because shadcn gave me a solid design foundation from the start, building new features like this feels like adding rooms to a house instead of rebuilding the foundation every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing LiveKit Over MediaSoup
&lt;/h2&gt;

&lt;p&gt;If there's one decision that saved the entire project, it was switching from MediaSoup to LiveKit.&lt;/p&gt;

&lt;p&gt;MediaSoup is powerful. It gives you raw control over WebRTC at the transport level. I started there and quickly found myself drowning in infrastructure work. Setting up the SFU. Handling codec negotiation. Debugging connectivity across firewalls and NATs. Weeks went by and I still didn't have reliable audio for more than a handful of users.&lt;/p&gt;

&lt;p&gt;LiveKit compressed all of that into days. Their SDK gave me spatial audio capabilities without building the proximity mixing layer from scratch. In Flat.social, you hear people louder when your avatar is close to them and quieter as you walk away. That's the core experience. With MediaSoup, implementing that would have been a project in itself. With LiveKit, it was configuration on top of a solid foundation.&lt;/p&gt;

&lt;p&gt;The real test comes at scale. When 50 people join a &lt;a href="https://flat.social/use-cases/virtual-happy-hour" rel="noopener noreferrer"&gt;virtual happy hour&lt;/a&gt; the system needs to handle dozens of simultaneous audio streams intelligently. LiveKit's selective forwarding handles this without me managing media server clusters. For a solo builder, that tradeoff between control and velocity isn't even close.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building With Claude
&lt;/h2&gt;

&lt;p&gt;Here's the honest truth. A real-time collaborative platform has no business being built by one person. The surface area is massive. WebRTC. State synchronization. Canvas rendering. Avatar systems. Map editors. Auth. Payments. A multilingual content site.&lt;/p&gt;

&lt;p&gt;Claude is the reason it's possible.&lt;/p&gt;

&lt;p&gt;I don't use it to generate code blindly. I use it to think. When I was designing how real-time state should sync across clients, I talked through the architecture with Claude the way I would with a senior engineer. When I needed to build out use case pages for &lt;a href="https://flat.social/use-cases/virtual-team-building-activities" rel="noopener noreferrer"&gt;virtual team building activities&lt;/a&gt; or figure out how to position Flat.social as an &lt;a href="https://flat.social/blog/best-internal-communication-tools" rel="noopener noreferrer"&gt;internal communication tool&lt;/a&gt;, it helped me think through both the technical and strategic side.&lt;/p&gt;

&lt;p&gt;Debugging is where it saves the most time. Real-time apps produce bugs that are painful to reproduce and harder to reason about. Race conditions. Stale state. Audio loops. Describing the problem to Claude and getting a structured analysis back is faster than staring at logs for hours.&lt;/p&gt;

&lt;p&gt;Claude Code in the terminal takes it further. Refactoring across files, writing test coverage, scaffolding new API routes. Having an assistant that understands the full codebase and can reason about it means I'm not just faster. I'm able to take on work I would have skipped entirely as a solo developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Is Going
&lt;/h2&gt;

&lt;p&gt;The modern stack makes things possible that weren't five years ago. Next.js handles both the marketing and the app. shadcn/ui gives you a design system without a design team. LiveKit solves real-time media without a DevOps team. Claude fills the gap of not having a full engineering team.&lt;/p&gt;

&lt;p&gt;None of that matters without a problem worth solving though. Remote teams don't need another meeting tool. They need a place. Somewhere to share a &lt;a href="https://flat.social/use-cases/virtual-office" rel="noopener noreferrer"&gt;virtual office&lt;/a&gt; that feels real. Where brainstorming, team socials, and daily standups happen in the same space. Where you run into someone and start a conversation you didn't schedule.&lt;/p&gt;

&lt;p&gt;That's Flat.social. It's in beta, and I can't wait to show you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nextjs</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Small European Countries Update</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Thu, 06 Jul 2023 16:27:43 +0000</pubDate>
      <link>https://dev.to/paweldotio/small-european-countries-update-5602</link>
      <guid>https://dev.to/paweldotio/small-european-countries-update-5602</guid>
      <description>&lt;p&gt;The creation process of the smallest and most basic project that I have created continues.&lt;/p&gt;

&lt;p&gt;Just added a number of pages with FAQs about different European countries.&lt;/p&gt;

&lt;p&gt;Is your country missing?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://smalleuropeancountry.com/guide/albania.html"&gt;Albania&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/andorra.html"&gt;Andorra&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/austria.html"&gt;Austria&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/belarus.html"&gt;Belarus&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/belgium.html"&gt;Belgium&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/bosnia-and-herzegovina.html"&gt;Bosnia and Herzegovina&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/bulgaria.html"&gt;Bulgaria&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/croatia.html"&gt;Croatia&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/cyprus.html"&gt;Cyprus&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/czech-republic.html"&gt;Czech Republic&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/denmark.html"&gt;Denmark&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/estonia.html"&gt;Estonia&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/finland.html"&gt;Finland&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/france.html"&gt;France&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/germany.html"&gt;Germany&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/greece.html"&gt;Greece&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/hungary.html"&gt;Hungary&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/iceland.html"&gt;Iceland&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/ireland.html"&gt;Ireland&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/italy.html"&gt;Italy&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/kosovo.html"&gt;Kosovo&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/latvia.html"&gt;Latvia&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/liechtenstein.html"&gt;Liechtenstein&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/lithuania.html"&gt;Lithuania&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/luxembourg.html"&gt;Luxembourg&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/malta.html"&gt;Malta&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/moldova.html"&gt;Moldova&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/monaco.html"&gt;Monaco&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/montenegro.html"&gt;Montenegro&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/netherlands.html"&gt;Netherlands&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/north-macedonia.html"&gt;North Macedonia&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/norway.html"&gt;Norway&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/poland.html"&gt;Poland&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/portugal.html"&gt;Portugal&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/romania.html"&gt;Romania&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/russia.html"&gt;Russia&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/san-marino.html"&gt;San Marino&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/serbia.html"&gt;Serbia&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/slovakia.html"&gt;Slovakia&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/slovenia.html"&gt;Slovenia&lt;/a&gt;, &lt;a href="https://smalleuropeancountry.com/guide/spain.html"&gt;Spain&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/sweden.html"&gt;Sweden&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/switzerland.html"&gt;Switzerland&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/ukraine.html"&gt;Ukraine&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/united-kingdom.html"&gt;United Kingdom&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://smalleuropeancountry.com/guide/vatican-city.html"&gt;Vatican City&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Small European Country Experiment</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Sat, 10 Jun 2023 16:53:43 +0000</pubDate>
      <link>https://dev.to/paweldotio/small-european-country-experiment-19if</link>
      <guid>https://dev.to/paweldotio/small-european-country-experiment-19if</guid>
      <description>&lt;p&gt;After dabbling into language learning with &lt;a href="https://glot.space"&gt;glot.space&lt;/a&gt;, &lt;a href="https://flat.social/use-cases/online-meetup"&gt;a tool for online meetups&lt;/a&gt;, I'm now experimenting with a website about a &lt;a href="https://smalleuropeancountry.com/"&gt;small european country&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Can it become the top 1 result when people want to learn about what is the smallest european country? Let's see!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Metaverse? What what?</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Sat, 04 Feb 2023 13:12:03 +0000</pubDate>
      <link>https://dev.to/paweldotio/metaverse-what-what-4kig</link>
      <guid>https://dev.to/paweldotio/metaverse-what-what-4kig</guid>
      <description>&lt;p&gt;Since Facebook morphed into Meta, metaverse has been one of the most hyped-up technologies right after cryptocurrencies and NFTs. Many were left wondering - what is the hype all about? What is this metaverse exactly? Why are such big companies like Meta or Microsoft focusing on it so much?&lt;/p&gt;

&lt;p&gt;Just like "social media" is a broad phrase that might differ when referencing various social media platforms, so is metaverse. It's a vague term that is still evolving and dependent on the use case, definitions might vary.&lt;/p&gt;

&lt;p&gt;Find out more at &lt;a href="https://flat.social/blog/metaverse-resources" rel="noopener noreferrer"&gt;Metaverse Resources (Apps, Articles, Games)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>announcement</category>
      <category>devto</category>
      <category>crypto</category>
    </item>
    <item>
      <title>What are the use cases for flat.social's spatial audio &amp; video tech?</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Wed, 07 Dec 2022 13:53:56 +0000</pubDate>
      <link>https://dev.to/paweldotio/what-are-the-use-cases-for-flatsocials-spatial-audio-video-tech-4o47</link>
      <guid>https://dev.to/paweldotio/what-are-the-use-cases-for-flatsocials-spatial-audio-video-tech-4o47</guid>
      <description>&lt;p&gt;Remote teams use &lt;a href="https://flat.social/" rel="noopener noreferrer"&gt;flat.social&lt;/a&gt; to socialise, collaborate and throw virtual parties! Create a permanent meeting space where each guest can move around, talk with others in proximity and hide for gossip in private rooms. It’s fun, creative, unstructured and nourishes the connections between your team members. With a number of activities designed to bring your team together, flat.social can act both as a company event space and a permanent virtual office where your remote team can hang out, play and collaborate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/all-hands-meeting" rel="noopener noreferrer"&gt;All Hands Meetings&lt;/a&gt; - Sometimes also called a town hall, an all-hands meeting is a regular company-wide meeting in which all leaders, stakeholders, and employees gather to discuss the most important topics within the organization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/coffee-chats" rel="noopener noreferrer"&gt;Coffee Chats&lt;/a&gt; - Coffee chats are informal, unstructured meetings that help people to know each other better. As the name suggests, they would usually happen over a coffee but the choice of beverage is (usually) not restricted!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/daily-standup" rel="noopener noreferrer"&gt;Daily Stand-ups&lt;/a&gt; - Daily stand-ups are strategic daily meetings that help to keep the team connected, informed, and on schedule.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/employee-onboarding-remote" rel="noopener noreferrer"&gt;Onboarding Remote Employees&lt;/a&gt; -  Most of the communication happens in goal-oriented meetings that are scheduled ahead and are there to focus on the task. If a new employee would be to join a company with no physical office, he might get to know a couple of the colleagues that he is working directly with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/one-to-one" rel="noopener noreferrer"&gt;One-To-One Meetings&lt;/a&gt; - A one-to-one meeting (or 1:1 meeting) is a recurrent check-in between two people within your company.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/quick-catchups" rel="noopener noreferrer"&gt;Quick Catch-Ups&lt;/a&gt; - Most of the meetings are are scheduled with a goal-oriented objective in mind and have an agenda. Serendipitous quick catch-ups rarely have one - often they’re just normal conversations between people which arise spontaneously and the topic is dictated by the current context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/virtual-break-room" rel="noopener noreferrer"&gt;Virtual Break Room&lt;/a&gt; - A virtual break room is an online space that you deliberately set up for spontaneous interactions. It’s a permanent digital video-conferencing space that is always open and allows anyone from your organization to show up at any time to speak with other participants who are already over there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/virtual-team-building" rel="noopener noreferrer"&gt;Virtual Team Building&lt;/a&gt; - Create a permanent meeting space where each guest can move around, talk with others in proximity and hide for gossip in private rooms. It’s fun, creative, unstructured and nourishes the connections between your team members. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/virtual-workplace" rel="noopener noreferrer"&gt;Virtual Workplace&lt;/a&gt; - A virtual workspace is a simulated office space that sports communication and collaboration tools that replicate the experience of a physical office space. It can act as a collaborative hub for teams that work remotely and don’t have physical HQ where they can meet in person daily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/ideation-session" rel="noopener noreferrer"&gt;Ideation Session&lt;/a&gt; - Ideation is a meeting during which the team generates solutions and ideas through a number of ideation techniques. Those include brainstorming, prototyping, the worst possible idea, and visual collaboration. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/online-brainstorming" rel="noopener noreferrer"&gt;Online Brainstorming&lt;/a&gt; - Brainstorming is a method creative groups and companies use to create new ideas to come up with novel solutions to clearly defined problems. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/online-meetup" rel="noopener noreferrer"&gt;Online Meetup&lt;/a&gt; - Meet-ups are social get togethers where participants with similar interests gather to discuss suggested topics&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/virtual-after-party" rel="noopener noreferrer"&gt;Virtual After Parties&lt;/a&gt; - As the name suggests, after party is the party that happens after a main event. During an after party the participants of the event might continue to network and meet others for more time. It’s an extension to the main event that is usually more casual and relaxed. After parties happen after conferences, concerts and all sorts of events that gather people together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/virtual-happy-hours" rel="noopener noreferrer"&gt;Virtual Happy Hours&lt;/a&gt; - Whether you're organising a weekly happy hours, fun lunch meeting or just want a space for your team to hang out in - we've got the tools you need to get started immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social/use-cases/online-retrospective" rel="noopener noreferrer"&gt;Online Retrospective&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://telegra.ph/Use-cases-of-spatial-video-conferencing-12-06" rel="noopener noreferrer"&gt;Telegraph link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Small tools challenge</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Sun, 20 Nov 2022 19:34:25 +0000</pubDate>
      <link>https://dev.to/paweldotio/small-tools-challenge-5j0</link>
      <guid>https://dev.to/paweldotio/small-tools-challenge-5j0</guid>
      <description>&lt;p&gt;Hey all!&lt;/p&gt;

&lt;p&gt;As you might've figured out from my older posts, I'm working on a video conferencing platform where everyone fly around - &lt;a href="https://flat.social"&gt;flat.social&lt;/a&gt;! It can be used as a fun alternative to &lt;a href="https://flat.social/alternative/microsoft-teams"&gt;Microsoft Teams&lt;/a&gt; or &lt;a href="https://flat.social/alternative/gather-town"&gt;Gather Town&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a side challenge, I'm going to be building some very small but useful tools that will accompany the website. The first one that I have just released is a &lt;a href="https://flat.social/webcam-microphone-test"&gt;webcam test&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Coming up next are &lt;a href="https://flat.social/tools/free-zoom-background-creator"&gt;Free Zoom Background Creator&lt;/a&gt;, &lt;a href="https://flat.social/tools/free-microsoft-teams-background-creator"&gt;Free Microsoft Teams Background Creator&lt;/a&gt;, online planning poker and an &lt;a href="https://flat.social/tools/free-online-screenrecorder"&gt;online screen recorder&lt;/a&gt;. Also maybe one for &lt;a href="https://flat.social/tools/free-skype-background-creator"&gt;Skype&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Which one should I pick up for next week? :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Remote or back to the office? Think about the commute time.</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Thu, 14 Jul 2022 21:38:48 +0000</pubDate>
      <link>https://dev.to/paweldotio/remote-or-back-to-the-office-think-about-the-commute-time-4lco</link>
      <guid>https://dev.to/paweldotio/remote-or-back-to-the-office-think-about-the-commute-time-4lco</guid>
      <description>&lt;p&gt;Hey fellow devs!&lt;/p&gt;

&lt;p&gt;It seems that more and more of us are delicately prompted to go back to the office. Most managers are justifying it by lack of spontaneous interactions (which can be easily tackled with by &lt;a href="https://flat.social/spatial-chatting"&gt;using flat.social for online socials&lt;/a&gt; as a &lt;a href="https://flat.social/blog/zoom-alternative"&gt;zoom alternative&lt;/a&gt;), need of physical space for &lt;a href="https://flat.social/virtual-happy-hours"&gt;virtual socials and happy hours&lt;/a&gt; and problems with mentoring junior members.&lt;/p&gt;

&lt;p&gt;Rarely though we take commute times into account. Assuming an average commute time of 90 minutes a day, in around a decade one will spend ~450 days of full-time work being a train passenger. That's 3600 hours.&lt;/p&gt;

&lt;p&gt;Thinking long term, in 25 years this will amount to 9000 hours.&lt;/p&gt;

&lt;p&gt;Want to calculate how many hours will you waste over a decade on commute? I just build a simple calculator alongside a blog post - &lt;a href="https://flat.social/blog/get-a-remote-team-back-in-the-office"&gt;Should my remote team be back in an office? &lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>flat.social new beta release - looking for feedback :)</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Sat, 19 Mar 2022 15:08:20 +0000</pubDate>
      <link>https://dev.to/paweldotio/flatsocial-new-beta-release-looking-for-feedback--20h1</link>
      <guid>https://dev.to/paweldotio/flatsocial-new-beta-release-looking-for-feedback--20h1</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;I just released a new version of &lt;a href="https://flat.social"&gt;flat.social &lt;/a&gt; - would love to hear what you think about it! It's a solo project that took me a couple months to build. &lt;/p&gt;

&lt;p&gt;The frontend is built using &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt; + &lt;a href="https://pixijs.com/"&gt;Pixi.js&lt;/a&gt; and the backend audio and video is powered mostly by &lt;a href="https://mediasoup.org/"&gt;Mediasoup&lt;/a&gt; with physics done with &lt;a href="https://brm.io/matter-js/"&gt;Matter.js&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://flat.social"&gt;flat.social&lt;/a&gt; is a playful video conferencing app where all guests can move around and talk with others who are in their &lt;a href="https://flat.social/spatial-chatting"&gt;proximity&lt;/a&gt;. Think &lt;a href="https://flat.social/spatial-virtual-office"&gt;remote socials&lt;/a&gt;, parties, permanent spaces and any online happenings where creating connections and networking is the main part of the agenda.  Some beta testers have also used it for &lt;a href="https://flat.social/remote-teaching-learning-software"&gt;remote education&lt;/a&gt; purposes.&lt;/p&gt;

&lt;p&gt;Here is a demo: &lt;a href="https://www.youtube.com/watch?v=UO3rN7sVn_A"&gt;https://www.youtube.com/watch?v=UO3rN7sVn_A&lt;/a&gt; for the lazy ones :)&lt;/p&gt;

&lt;p&gt;Landing page: &lt;a href="https://flat.social"&gt;https://flat.social&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Features: &lt;a href="https://flat.social/online-meeting-features"&gt;https://flat.social/online-meeting-features&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gjSLIvxy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hx3t2nvatgjqylz754iu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gjSLIvxy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hx3t2nvatgjqylz754iu.png" alt="Image description" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Fun feature update</title>
      <dc:creator>typical pawel</dc:creator>
      <pubDate>Tue, 30 Nov 2021 14:59:47 +0000</pubDate>
      <link>https://dev.to/paweldotio/fun-feature-update-4pc3</link>
      <guid>https://dev.to/paweldotio/fun-feature-update-4pc3</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2oyN4o4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qou6f9c5ojzxvx5nd0t9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2oyN4o4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qou6f9c5ojzxvx5nd0t9.gif" alt="Image description" width="480" height="480"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Had too much coffee this morning and added a fun animated gesture feature to &lt;a href="https://flat.social"&gt;flat.social&lt;/a&gt; - a fun video conferencing app that utilises &lt;a href="https://flat.social/spatial-chatting"&gt;spatial&lt;/a&gt; audio &amp;amp; video to create an experience where attendees can move around and speak with others around them. The GIF with demo might load for a minute or two!&lt;/p&gt;

&lt;p&gt;This work was done quite quickly - fortunately I found &lt;a href="https://github.com/davidfig/pixi-ease"&gt;davidfig/pixi-ease&lt;/a&gt; on Github which made it much easier. &lt;/p&gt;

&lt;p&gt;How does it work?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User selected a gesture on the keyboard (each key from 1-&amp;gt;7 is bound to a different gesture).&lt;/li&gt;
&lt;li&gt;App picks it up and sends an event via socket.io to the server. The server picks it up, figures out who sent it and informs everyone in the same room that a gesture has been emitted.&lt;/li&gt;
&lt;li&gt;Gesture event with associated playerId comes back to all of the clients connected to the room.&lt;/li&gt;
&lt;li&gt;Particular animation is triggered on the body of the player using pixi-ease.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Would love to know what you think! Maybe virtual gestures could be a cool addition to this new &lt;a href="https://flat.social/zoom-alternative"&gt;zoom alternative&lt;/a&gt; :)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>buildinpublic</category>
      <category>webdev</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
