[{"data":1,"prerenderedAt":464},["ShallowReactive",2],{"projects":3},[4,63,111,143,180,216,240,277,307,342,374,398,430],{"title":5,"value":6,"shortDescription":7,"description":10,"url":13,"repos":14,"demoUrl":23,"featured":24,"showOnHome":24,"category":25,"technologies":26,"learned":37,"image":62},"Ledger","ledger",{"en":8,"pl":9},"Self-hosted log analytics — SDK, backend and dashboard. Datadog-style observability you own.","Samodzielnie hostowana analityka logów — SDK, backend i dashboard. Obserwowalność u siebie.",{"en":11,"pl":12},"Ledger is a self-hosted observability stack I built end to end across three repos. The Python SDK drops into any FastAPI, Django or Flask app as middleware and ships logs, errors and timings in the background. A FastAPI + Elasticsearch backend ingests and queries millions of records, and a Nuxt dashboard streams it all live with drag-and-drop panels.","Ledger to platforma obserwowalności, którą zbudowałem od początku do końca w trzech repozytoriach. SDK w Pythonie wpina się do dowolnej aplikacji FastAPI, Django lub Flask jako middleware i wysyła logi, błędy i metryki w tle. Backend na FastAPI i Elasticsearch przyjmuje i przeszukuje miliony rekordów, a dashboard w Nuxt streamuje wszystko na żywo z panelami drag & drop.","https://github.com/JakubTuta/Ledger-WEB",[15,17,20],{"label":16,"url":13},"Web",{"label":18,"url":19},"Server","https://github.com/JakubTuta/Ledger-APP",{"label":21,"url":22},"SDK","https://github.com/JakubTuta/Ledger-SDK","https://ledger.jtuta.cloud",true,"Web Application",[27,28,29,30,31,32,33,34,35,36],"Nuxt 3","Vue 3","TypeScript","Vuetify","FastAPI","Python","PostgreSQL","Elasticsearch","Redis","Docker",[38,41,44,47,50,53,56,59],{"en":39,"pl":40},"Streaming logs live in the browser without the UI choking on volume","Streaming logów na żywo w przeglądarce bez zatykania UI przy dużym wolumenie",{"en":42,"pl":43},"Building drag-and-drop dashboards with layouts that persist per user","Budowanie dashboardów drag & drop z układami zapisywanymi per użytkownik",{"en":45,"pl":46},"Multi-tenant log ingestion that scales horizontally","Wielodostępowa agregacja logów skalująca się horyzontalnie",{"en":48,"pl":49},"Keeping queries under 50ms over millions of rows with Elasticsearch","Utrzymanie zapytań poniżej 50ms na milionach rekordów dzięki Elasticsearch",{"en":51,"pl":52},"Writing an SDK with near-zero overhead using background batching and retries","Pisanie SDK o znikomym narzucie dzięki batchingowi w tle i ponowieniom",{"en":54,"pl":55},"Making one middleware work across FastAPI, Django and Flask","Sprawienie, by jedno middleware działało w FastAPI, Django i Flask",{"en":57,"pl":58},"Publishing and maintaining a real package on PyPI","Publikacja i utrzymanie prawdziwego pakietu na PyPI",{"en":60,"pl":61},"Self-hosting production observability with no vendor lock-in","Self-hosting obserwowalności klasy produkcyjnej bez vendor lock-in","https://files.jtuta.cloud/public/portfolio/projects/ledger.png",{"title":64,"value":65,"shortDescription":66,"description":69,"url":72,"demoUrl":73,"featured":24,"showOnHome":24,"category":74,"technologies":75,"learned":88,"image":110},"Wony","wony",{"en":67,"pl":68},"Always-on personal AI assistant — voice, web UI, tray mode and 15+ integrations.","Zawsze aktywny osobisty asystent AI — głos, web UI, tryb tray i 15+ integracji.",{"en":70,"pl":71},"Wony is a modular personal AI assistant that runs in the background as a system tray app on Windows. It accepts text and voice commands through a browser-based chat UI or console, routes requests to Claude, Gemini or a local Ollama model, and streams replies sentence by sentence so you hear the first word before the full response is ready. Modules cover weather, Spotify, Gmail, Google Calendar, screen capture, Shazam, smart switches and more — each auto-registers on startup and gracefully skips if its credentials are missing. Voice uses faster-whisper offline STT with optional GPU acceleration and a custom wake word trained on openwakeword. Semantic memory with local embeddings lets it recall past conversations by meaning without any external service.","Wony to modularny osobisty asystent AI działający w tle jako aplikacja tray na Windowsie. Przyjmuje komendy tekstowe i głosowe przez przeglądarkowy chat lub konsolę, przekierowuje zapytania do Claude, Gemini lub lokalnego Ollama i strumieniuje odpowiedzi zdanie po zdaniu — pierwsze słowo słyszysz, zanim cała odpowiedź jest gotowa. Moduły obsługują pogodę, Spotify, Gmail, Google Calendar, zrzuty ekranu, Shazam, inteligentne przełączniki i więcej — każdy rejestruje się automatycznie przy starcie i łagodnie pomija brakujące dane uwierzytelniające. Głos używa faster-whisper (STT offline) z opcjonalną akceleracją GPU i niestandardowym słowem aktywacyjnym trenowanym na openwakeword. Pamięć semantyczna z lokalnymi embeddingami pozwala przywoływać poprzednie rozmowy według znaczenia bez żadnych zewnętrznych usług.","https://github.com/JakubTuta/Wony",null,"AI & Machine Learning",[32,76,77,78,79,80,81,82,83,84,85,86,87],"faster-whisper","Kokoro TTS","Claude API","Google Gemini API","Ollama","Spotify API","Gmail API","Google Calendar API","OpenWeatherMap API","MCP","ONNX","FAISS",[89,92,95,98,101,104,107],{"en":90,"pl":91},"Building a plugin system where modules self-register and degrade gracefully when unconfigured","Budowa systemu wtyczek, gdzie moduły rejestrują się samoczynnie i łagodnie degradują bez konfiguracji",{"en":93,"pl":94},"Streaming TTS so the first sentence plays before the AI finishes generating","Streaming TTS — pierwsza zdanie gra, zanim AI skończy generować",{"en":96,"pl":97},"Running offline STT with faster-whisper and GPU acceleration via CUDA","Uruchamianie offline STT z faster-whisper i akceleracją GPU przez CUDA",{"en":99,"pl":100},"Training a custom wake word model with openwakeword","Trenowanie własnego modelu słowa aktywacyjnego z openwakeword",{"en":102,"pl":103},"Adding semantic memory with local embeddings and vector search","Dodawanie pamięci semantycznej z lokalnymi embeddingami i wyszukiwaniem wektorowym",{"en":105,"pl":106},"Integrating an MCP client so the assistant can use any MCP-compatible server","Integracja klienta MCP, dzięki czemu asystent może korzystać z dowolnego serwera MCP",{"en":108,"pl":109},"Switching between Claude, Gemini and Ollama behind one interface","Przełączanie między Claude, Gemini i Ollama za jednym interfejsem","https://files.jtuta.cloud/public/portfolio/projects/wony.png",{"title":112,"value":113,"shortDescription":114,"description":117,"url":120,"demoUrl":73,"featured":24,"showOnHome":121,"category":25,"technologies":122,"learned":126,"image":142},"Code Lens","code-lens",{"en":115,"pl":116},"AI code-testing platform that runs generated Python tests in isolated Kubernetes pods.","Platforma do testowania kodu AI — generowane testy Pythona w izolowanych podach Kubernetes.",{"en":118,"pl":119},"CodeLens generates Python tests with AI and runs them safely in throwaway Kubernetes pods. It's split into four services — a Nuxt frontend, a FastAPI backend handling the AI, a test runner, and the short-lived containers that actually execute the code — talking to each other over WebSockets.","CodeLens generuje testy Pythona z pomocą AI i uruchamia je bezpiecznie w jednorazowych podach Kubernetes. Dzieli się na cztery serwisy — frontend w Nuxt, backend FastAPI obsługujący AI, runner testów oraz krótkożyjące kontenery, które faktycznie wykonują kod — komunikujące się przez WebSockety.","https://github.com/JakubTuta/CodeLens.git",false,[123,29,30,31,32,124,36,125],"Nuxt.js","Kubernetes","WebSocket",[127,130,133,136,139],{"en":128,"pl":129},"Splitting a system into microservices with clear boundaries","Podział systemu na mikroserwisy z jasnymi granicami",{"en":131,"pl":132},"Running untrusted code safely with isolated Kubernetes pods and RBAC","Bezpieczne uruchamianie niezaufanego kodu w izolowanych podach Kubernetes z RBAC",{"en":134,"pl":135},"Wiring a full stack together over WebSockets","Spięcie całego stacku przez WebSockety",{"en":137,"pl":138},"Deploying with Docker Compose and Kubernetes","Wdrażanie z Docker Compose i Kubernetes",{"en":140,"pl":141},"Using Gemini/Claude to generate test code","Generowanie kodu testów przy użyciu Gemini/Claude","https://files.jtuta.cloud/public/portfolio/projects/code-lens.png",{"title":144,"value":145,"shortDescription":146,"description":149,"url":152,"demoUrl":153,"featured":121,"showOnHome":121,"category":25,"technologies":154,"learned":160,"image":179},"Finance","finance",{"en":147,"pl":148},"Expense and subscription tracker with AI insights — runs locally when you want privacy.","Tracker wydatków i subskrypcji z podpowiedziami AI — lokalnie, gdy zależy ci na prywatności.",{"en":150,"pl":151},"An app for tracking expenses, subscriptions and where the money actually goes. It imports CSVs, parses them with AI, converts currencies and gives spending suggestions. The whole thing can run locally if you'd rather not hand your finances to someone else's server.","Aplikacja do śledzenia wydatków, subskrypcji i tego, gdzie tak naprawdę uciekają pieniądze. Importuje CSV, parsuje je z pomocą AI, przelicza waluty i podpowiada decyzje finansowe. Całość można uruchomić lokalnie, jeśli wolisz nie oddawać finansów na cudzy serwer.","https://github.com/JakubTuta/finance","https://finance-9795f.web.app",[31,155,123,156,36,29,157,158,159],"Vue.js","MongoDB","Gemini AI","Currency API","MongoDB Atlas",[161,164,167,170,173,176],{"en":162,"pl":163},"Importing messy bank CSVs and cleaning them up with AI","Import niechlujnych CSV z banku i porządkowanie ich z pomocą AI",{"en":165,"pl":166},"Building a FastAPI backend with JWT auth","Budowa backendu FastAPI z uwierzytelnianiem JWT",{"en":168,"pl":169},"Converting between currencies from a live API","Konwersja walut z użyciem API na żywo",{"en":171,"pl":172},"Designing for privacy with a local-first deployment option","Projektowanie pod prywatność z opcją wdrożenia lokalnego",{"en":174,"pl":175},"Storing data in MongoDB Atlas and managing the cluster","Przechowywanie danych w MongoDB Atlas i zarządzanie klastrem",{"en":177,"pl":178},"Turning raw transactions into useful spending insights","Przekształcanie surowych transakcji w użyteczne wnioski o wydatkach","https://files.jtuta.cloud/public/portfolio/projects/finance.png",{"title":181,"value":182,"shortDescription":183,"description":186,"url":189,"demoUrl":190,"featured":121,"showOnHome":121,"category":25,"technologies":191,"learned":196,"image":215},"Flagship","flagship",{"en":184,"pl":185},"My portfolio — resume, projects and a bilingual blog, built SSR-first for SEO.","Moje portfolio — CV, projekty i dwujęzyczny blog, zbudowane pod SSR i SEO.",{"en":187,"pl":188},"This site. A portfolio with my resume, project showcase and a bilingual (EN/PL) blog. Built with Nuxt 3 and Vuetify, rendered on the server for SEO, and self-hosted in a Docker container on a VPS. Blog posts are Markdown, content is bundled at build time, and view counts persist in a mounted volume.","Ta strona. Portfolio z moim CV, prezentacją projektów i dwujęzycznym (EN/PL) blogiem. Zbudowane na Nuxt 3 i Vuetify, renderowane po stronie serwera pod SEO i hostowane samodzielnie w kontenerze Docker na VPS. Wpisy blogowe są w Markdownie, treść wbudowywana przy buildzie, a liczniki wyświetleń przechowywane w zamontowanym wolumenie.","https://github.com/JakubTuta/Flagship","https://jakubtutka.com",[27,28,29,30,192,193,36,194,195],"UnoCSS","Pinia","SSR","SEO",[197,200,203,206,209,212],{"en":198,"pl":199},"Getting SSR right so pages render fully on the server","Poprawne SSR — strony renderowane w całości po stronie serwera",{"en":201,"pl":202},"Practical SEO: meta tags, Open Graph, JSON-LD and hreflang","Praktyczne SEO: meta tagi, Open Graph, JSON-LD i hreflang",{"en":204,"pl":205},"Shipping a bilingual site with proper i18n","Dwujęzyczna strona z porządnym i18n",{"en":207,"pl":208},"Self-hosting on a VPS with Docker instead of a managed platform","Self-hosting na VPS z Dockerem zamiast platformy zarządzanej",{"en":210,"pl":211},"Persisting state across redeploys with mounted volumes","Zachowanie stanu między wdrożeniami dzięki zamontowanym wolumenom",{"en":213,"pl":214},"Keeping the frontend fast and responsive on every screen","Utrzymanie szybkiego i responsywnego frontendu na każdym ekranie","https://files.jtuta.cloud/public/portfolio/projects/flagship.png",{"title":217,"value":218,"shortDescription":219,"description":222,"url":225,"demoUrl":73,"featured":121,"showOnHome":121,"category":226,"technologies":227,"learned":229,"image":239},"Flappy Bird","flappy-bird",{"en":220,"pl":221},"Flappy Bird rebuilt in Python with PyGame — gravity, collisions and scoring.","Flappy Bird odtworzony w Pythonie z PyGame — grawitacja, kolizje i punktacja.",{"en":223,"pl":224},"A clone of Flappy Bird written in Python with PyGame. Nothing fancy — a game loop, gravity-driven physics, collision detection against the pipes, and score tracking. A small project for getting the fundamentals of 2D games down.","Klon Flappy Birda napisany w Pythonie z PyGame. Nic wymyślnego — pętla gry, fizyka oparta na grawitacji, wykrywanie kolizji z rurami i liczenie punktów. Mały projekt, żeby ogarnąć podstawy gier 2D.","https://github.com/JakubTuta/floppyBird","Game Development",[32,228],"PyGame",[230,233,236],{"en":231,"pl":232},"The basics of a game loop and frame timing","Podstawy pętli gry i taktowania klatek",{"en":234,"pl":235},"2D collision detection","Wykrywanie kolizji 2D",{"en":237,"pl":238},"Simple physics — gravity and jumping","Prosta fizyka — grawitacja i skok","https://files.jtuta.cloud/public/portfolio/projects/flappy-bird.png",{"title":241,"value":242,"shortDescription":243,"description":246,"url":249,"repos":250,"demoUrl":254,"featured":24,"showOnHome":24,"category":25,"technologies":255,"learned":257,"image":276},"Minsik","minsik",{"en":244,"pl":245},"Book tracking app — rate reads across 8 dimensions and share your shelf.","Aplikacja do śledzenia książek — oceniaj w 8 wymiarach i dziel się półką.",{"en":247,"pl":248},"Minsik is a reading companion: track what you've read, are reading and want to read next, and rate books across eight dimensions like pacing and emotional impact instead of one blunt star score. A Nuxt frontend sits on a FastAPI + gRPC microservice backend that searches millions of titles and keeps importing fresh book data from Open Library and Google Books.","Minsik to towarzysz czytelnika: śledź co przeczytałeś, czytasz i planujesz, a książki oceniaj w ośmiu wymiarach — tempo, ładunek emocjonalny i inne — zamiast jedną tępą gwiazdką. Frontend w Nuxt stoi na mikroserwisowym backendzie FastAPI + gRPC, który przeszukuje miliony tytułów i nieustannie importuje świeże dane z Open Library i Google Books.","https://github.com/JakubTuta/Minsik-web",[251,252],{"label":16,"url":249},{"label":18,"url":253},"https://github.com/JakubTuta/Minsik-server","https://minsik.jtuta.cloud",[27,28,29,30,31,32,256,34,35,36],"gRPC",[258,261,264,267,270,273],{"en":259,"pl":260},"Designing a rating system that goes past a single star score","Projektowanie systemu ocen wykraczającego poza jedną gwiazdkę",{"en":262,"pl":263},"SSR pages with JSON-LD and Open Graph for SEO","Strony SSR z JSON-LD i Open Graph dla SEO",{"en":265,"pl":266},"Full-text search with infinite scroll over a huge catalog","Wyszukiwanie pełnotekstowe z nieskończonym przewijaniem w wielkim katalogu",{"en":268,"pl":269},"Splitting the backend into gRPC microservices","Podział backendu na mikroserwisy gRPC",{"en":271,"pl":272},"BM25 ranking tuned with popularity and recency signals","Ranking BM25 dostrojony sygnałami popularności i aktualności",{"en":274,"pl":275},"Continuously pulling data from external APIs (Open Library, Google Books)","Ciągłe pobieranie danych z zewnętrznych API (Open Library, Google Books)","https://files.jtuta.cloud/public/portfolio/projects/minsik.png",{"title":278,"value":279,"shortDescription":280,"description":283,"url":286,"demoUrl":287,"featured":121,"showOnHome":121,"category":25,"technologies":288,"learned":290,"image":306},"League Rats","league-rats",{"en":281,"pl":282},"Track LoL pro players, their accounts and live match stats via the Riot API.","Śledź profesjonalnych graczy LoL, ich konta i statystyki meczów przez Riot API.",{"en":284,"pl":285},"LeagueRats lets you follow League of Legends pros and their games. It pulls from the Riot Games API for live tracking, match history and multi-account support, with a Nuxt frontend, a FastAPI backend and Firebase behind it.","LeagueRats pozwala śledzić profesjonalnych graczy League of Legends i ich rozgrywki. Korzysta z API Riot Games do śledzenia na żywo, historii meczów i obsługi wielu kont, z frontendem w Nuxt, backendem FastAPI i Firebase pod spodem.","https://github.com/JakubTuta/LeagueRats","https://leaguerats.net",[155,123,29,31,32,289,36],"Firebase",[291,294,297,300,303],{"en":292,"pl":293},"Working with the Riot Games API and its rate limits","Praca z API Riot Games i jego limitami zapytań",{"en":295,"pl":296},"Processing match data in near real time","Przetwarzanie danych meczowych niemal w czasie rzeczywistym",{"en":298,"pl":299},"Deploying a web app to the cloud with Docker","Wdrażanie aplikacji webowej do chmury z Dockerem",{"en":301,"pl":302},"Optimizing performance under lots of API calls","Optymalizacja wydajności przy dużej liczbie zapytań API",{"en":304,"pl":305},"Using Firebase for storage and auth","Wykorzystanie Firebase do przechowywania danych i autoryzacji","https://files.jtuta.cloud/public/portfolio/projects/league-rats.png",{"title":308,"value":309,"shortDescription":310,"description":313,"url":316,"demoUrl":73,"featured":121,"showOnHome":121,"category":74,"technologies":317,"learned":323,"image":73},"Neural Network","neural-network",{"en":311,"pl":312},"A neural network built from scratch in Python with just NumPy — no TensorFlow, no PyTorch.","Sieć neuronowa od zera w Pythonie, tylko NumPy — bez TensorFlow i PyTorch.",{"en":314,"pl":315},"A neural network written from scratch with nothing but Python and NumPy. I wrote my own layers, activation functions and backpropagation to understand the math instead of trusting a framework to handle it. It reaches accuracy comparable to TensorFlow or PyTorch on the same tasks.","Sieć neuronowa napisana od zera, wyłącznie w Pythonie i NumPy. Sam zaimplementowałem warstwy, funkcje aktywacji i wsteczną propagację, żeby zrozumieć matematykę, zamiast zdawać się na framework. Osiąga dokładność porównywalną z TensorFlow czy PyTorch na tych samych zadaniach.","https://github.com/JakubTuta/Neural_network",[32,318,319,320,321,322],"NumPy","Mathematics","Linear Algebra","Calculus","Machine Learning",[324,327,330,333,336,339],{"en":325,"pl":326},"How a neural network actually works, layer by layer","Jak naprawdę działa sieć neuronowa, warstwa po warstwie",{"en":328,"pl":329},"Implementing backpropagation by hand","Ręczna implementacja wstecznej propagacji",{"en":331,"pl":332},"Activation functions and their derivatives","Funkcje aktywacji i ich pochodne",{"en":334,"pl":335},"Gradient descent and optimization","Spadek gradientu i optymalizacja",{"en":337,"pl":338},"The linear algebra and calculus underneath ML","Algebra liniowa i analiza matematyczna pod spodem ML",{"en":340,"pl":341},"Designing a custom layer architecture","Projektowanie własnej architektury warstw",{"title":343,"value":344,"shortDescription":345,"description":348,"url":351,"demoUrl":73,"featured":24,"showOnHome":121,"category":74,"technologies":352,"learned":354,"image":373},"OllamaChat","ollama-chat",{"en":346,"pl":347},"Local AI chat — run LLMs on your own machine with Docker and Ollama, fully private.","Lokalny chat AI — uruchom LLM-y u siebie z Dockerem i Ollama, w pełni prywatnie.",{"en":349,"pl":350},"A chat app for running large language models locally with Ollama and Docker, so your conversations never leave your machine. Nuxt frontend, Django backend, MongoDB for history — sign in, pick a model, and chat without sending anything to the cloud.","Aplikacja czatu do uruchamiania dużych modeli językowych lokalnie z Ollama i Dockerem, dzięki czemu rozmowy nigdy nie opuszczają twojej maszyny. Frontend w Nuxt, backend Django, MongoDB na historię — zaloguj się, wybierz model i rozmawiaj bez wysyłania czegokolwiek do chmury.","https://github.com/JakubTuta/chatbot",[155,123,29,32,353,156,36,80],"Django",[355,358,361,364,367,370],{"en":356,"pl":357},"Running LLMs locally with Ollama","Lokalne uruchamianie LLM-ów z Ollama",{"en":359,"pl":360},"Containerizing the whole stack with Docker","Konteneryzacja całego stacku z Dockerem",{"en":362,"pl":363},"Building a Django backend on MongoDB","Budowa backendu Django na MongoDB",{"en":365,"pl":366},"User auth and session handling","Uwierzytelnianie użytkowników i obsługa sesji",{"en":368,"pl":369},"Streaming chat responses in real time","Streaming odpowiedzi czatu w czasie rzeczywistym",{"en":371,"pl":372},"Designing for privacy — nothing leaves the machine","Projektowanie pod prywatność — nic nie opuszcza maszyny","https://files.jtuta.cloud/public/portfolio/projects/ollama-chat.png",{"title":375,"value":376,"shortDescription":377,"description":380,"url":383,"demoUrl":73,"featured":121,"showOnHome":121,"category":74,"technologies":384,"learned":387,"image":397},"SnakeAI","snake-ai",{"en":378,"pl":379},"Snake that teaches itself to play with a hand-written NEAT algorithm in Python.","Snake, który sam uczy się grać dzięki własnej implementacji NEAT w Pythonie.",{"en":381,"pl":382},"Classic Snake in Python where the snake learns to play itself. I implemented NEAT (NeuroEvolution of Augmenting Topologies) from scratch, so the AI evolves over generations to chase apples and stop running into walls or its own tail.","Klasyczny Snake w Pythonie, w którym wąż sam uczy się grać. Zaimplementowałem NEAT (NeuroEvolution of Augmenting Topologies) od podstaw, więc AI ewoluuje przez pokolenia, żeby gonić jabłka i przestać wpadać w ściany i własny ogon.","https://github.com/JakubTuta/Snake_AI",[32,385,386],"Pygame","NEAT Algorithm",[388,391,394],{"en":389,"pl":390},"Implementing NEAT from scratch","Implementacja NEAT od podstaw",{"en":392,"pl":393},"How evolutionary algorithms train neural nets","Jak algorytmy ewolucyjne trenują sieci neuronowe",{"en":395,"pl":396},"The basics of building a game in PyGame","Podstawy budowy gry w PyGame","https://files.jtuta.cloud/public/portfolio/projects/snake-ai.png",{"title":399,"value":400,"shortDescription":401,"description":404,"url":407,"demoUrl":73,"featured":121,"showOnHome":121,"category":25,"technologies":408,"learned":413,"image":429},"Strona randkowa","strona-randkowa",{"en":402,"pl":403},"Uni team project — a Tinder-style dating app on Nuxt and Firebase.","Projekt zespołowy na studia — randkowa apka w stylu Tindera na Nuxt i Firebase.",{"en":405,"pl":406},"A Tinder-style dating app built with three other students for a university project. Nuxt on the frontend, Firebase on the back — we leaned on Firestore triggers and scheduled Cloud Functions for matching and clean-up, which meant plenty of learning to work as a team on a shared codebase.","Randkowa aplikacja w stylu Tindera zbudowana z trójką innych studentów na projekt zaliczeniowy. Nuxt na frontendzie, Firebase z tyłu — oparliśmy się na triggerach Firestore i zaplanowanych Cloud Functions do matchowania i sprzątania, co było też lekcją pracy zespołowej na wspólnym repozytorium.","https://github.com/JakubTuta/Strona-randkowa",[155,123,289,409,410,411,412,32],"Firestore","Google Cloud Platform","Cloud Functions","Firebase Hosting",[414,417,420,423,426],{"en":415,"pl":416},"Writing Firebase Cloud Functions","Pisanie Firebase Cloud Functions",{"en":418,"pl":419},"Firestore triggers and scheduled jobs","Triggery Firestore i zaplanowane zadania",{"en":421,"pl":422},"Wiring a Nuxt frontend to a Firebase backend","Spięcie frontendu Nuxt z backendem Firebase",{"en":424,"pl":425},"Debugging CORS the hard way","Walka z CORS po przejściach",{"en":427,"pl":428},"Working in a team on one codebase","Praca zespołowa na jednym repozytorium","https://files.jtuta.cloud/public/portfolio/projects/strona-randkowa.png",{"title":431,"value":432,"shortDescription":433,"description":436,"url":439,"demoUrl":440,"featured":121,"showOnHome":121,"category":74,"technologies":441,"learned":444,"image":463},"Summarizzler","summarizzler",{"en":434,"pl":435},"AI summaries from websites, PDFs, text and YouTube — with a shared, searchable archive.","Streszczenia AI ze stron, PDF-ów, tekstu i YouTube — we wspólnym, przeszukiwalnym archiwum.",{"en":437,"pl":438},"A web app that summarizes pretty much anything you throw at it — web pages, pasted text, PDFs or YouTube videos — using Gemini. Summaries land in a shared database everyone can search, so you're not re-summarizing something someone already did.","Aplikacja webowa, która streszcza niemal wszystko, co jej podrzucisz — strony, wklejony tekst, PDF-y czy filmy z YouTube — przy użyciu Gemini. Streszczenia trafiają do wspólnej bazy, którą każdy może przeszukać, więc nie streszczasz po raz drugi czegoś, co ktoś już zrobił.","https://github.com/JakubTuta/Summarizzler","https://summarizzler.web.app",[155,123,32,353,33,442,29,443],"Gemini","AI/LLM",[445,448,451,454,457,460],{"en":446,"pl":447},"Pulling text out of very different sources (PDF, web, video)","Wyciąganie tekstu z bardzo różnych źródeł (PDF, web, wideo)",{"en":449,"pl":450},"Summarizing with Gemini","Streszczanie z Gemini",{"en":452,"pl":453},"Scraping web pages for content","Scraping stron po treść",{"en":455,"pl":456},"Handling file uploads","Obsługa przesyłania plików",{"en":458,"pl":459},"Searching and indexing in PostgreSQL","Wyszukiwanie i indeksowanie w PostgreSQL",{"en":461,"pl":462},"Deploying a full-stack app end to end","Wdrożenie aplikacji full-stack od początku do końca","https://files.jtuta.cloud/public/portfolio/projects/summarizzler.png",1783609805589]