{"scan":{"token":"sample-imagineit-dev","url":"https://imagineit.dev/","status":"done","error_code":null,"checkset_version":"0.4.6","score":90.7,"grade":"A","capped_by":[],"finished_at":"2026-11-03T18:03:33Z"},"summary":{"pass":24,"warn":5,"fail":0,"na":1,"blocked":0,"error":0},"agent_view":{"text_chars":5011,"tokens":1253,"boilerplate_ratio":0.253,"text":"~/imagineit/ SOFTWARE STUDIO · ŁÓDŹ, POLANDFrom first idea to working software.A small software studio in Łódź, Poland, for founders and teams worldwide. We build web and mobile apps, integrations and AI features, plus the APIs that hold them together.Let’s talk Software since 2009Rails since 2011Clients in the US, UK and EuropeRUBY / TYPESCRIPT / PYTHON / KOTLINSCROLL TO EXPLORE 01 / CAPABILITIESWhat we build. Web, mobile, integrations, AI.01Web applications & products02Mobile appsNative iOS and Android apps, and hybrid apps built once for both platforms with React Native or Kotlin Multiplatform. Connected to the same backend and APIs as your web product.IOS / ANDROID / REACT NATIVE / KOTLINMobile app development03Integrations & automationWe connect the tools your business runs on: payments, CRMs, e-invoicing and the jobs that move data between them, built to keep working when the other side does not.API / PAYMENTS / WORKFLOWSAPI integrations and paymentsKSeF integration04AI & developer toolsAI features, MCP servers, plugins and internal tools, each built for one specific job in your product or workflow.AI / MCP / PLUGINSAI features and MCP servers05Legacy modernization & securityYou work directly with the people building your software.No account managers in between. Questions go to whoever wrote the code.02 / SELECTED WORKWhat we have built. Products and client work.Each case study says what we built and what we did not.Independent product / Agent readinessMeet CrawlWise.A technical audit for AI crawlers and answer engines: CrawlWise renders a page, runs 30+ checks and returns a private report with evidence and fixes.Shows what an AI crawler actually sees,and what to fix first.INDEPENDENT PRODUCT · SAASMeet Tribely.A project workspace that brings Kanban boards, documents, and real-time collaboration together. Built independently from the first concept through deployment.Built by ImagineIT.From product concept to deployment.Collaboration / APIs & full-stack delivery03GoodylabsAPIs, integrations and frontendClient names and screenshots are not published.Goodylabs collaboration API, frontend and integration work across booking, payments, e-invoicing and data projects delivered with Goodylabs since 2014.Since 2014APIs, integrations and frontendRuby on Rails / TypeScript / ReactIndependent work / Ticketing API04ShakaPass A Ruby on Rails API for a mobile ticket-booking app, with PostgreSQL and careful handling of event times across time zones.APIMobile ticket bookingRuby on Rails API / PostgreSQLExplore all projects 03 / HOW WE WORKAI writes a lot of the code. We review all of it.What that looks like day to day.You see working software early and shape the next steps with us.We own the architecture, review changes, and check quality and security before release.How a project runs, from MVP to handover 04 / ABOUTSmall studio. Since 2009.We build software for clients in the US, the UK and Europe. Since 2009 that has meant e-commerce, booking, payments, media, healthcare and financial services, with a lot of API work along the way.Most of our clients are businesses: founders with a new product, product teams that need more hands, and companies whose system has to keep growing. We scope every project separately, so the easiest start is to tell us what you need.Building softwareSince 2009ClientsUS, UK, and EuropeEngagementB2B: new products, extending existing systems, ongoing maintenanceAvailabilityOpen to new projects nowLanguagesEnglish, PolishWhere are you based?We are based in Łódź, Poland, and work with clients worldwide in English and Polish.Do you work with clients outside Poland?Yes. Most of our clients are in the US, the UK, and across Europe. We work in English and Polish.What kind of clients do you work with?Mainly businesses (B2B): founders building a new product, product teams that need more hands, and companies with an existing system to extend.Can you take over or extend an existing product?Yes. Extending systems that alre","markdown":{"text":"# ImagineIT\n\n> Independent software studio in Łódź, Poland, working with clients worldwide. You talk directly to the people who write the code.\n\nWe build software for clients in the US, the UK and Europe. Since 2009 that has meant e-commerce, booking, payments, media, healthcare and financial services, with a lot of API work along the way.\n\nMost of our clients are businesses: founders with a new product, product teams that need more hands, and companies whose system has to keep growing. We scope every project separately, so the easiest start is to tell us what you need.\n\nCore stack: Ruby on Rails; TypeScript / Node.js / NestJS / Next.js / Astro; Python / Django; Mobile: native iOS and Android, React Native, Kotlin Multiplatform; PostgreSQL / MySQL; AWS / Cloudflare / Kubernetes.\n\n## Services\n\n- Web applications & products: Web applications, SaaS products and APIs, from a first MVP to platforms with more than 20 services.\n- Mobile apps: Native iOS and Android apps, and hybrid apps built once for both platforms with React Native or Kotlin Multiplatform. Connected to the same backend and APIs as your web product.\n- Integrations & automation: We connect the tools your business runs on: payments, CRMs, e-invoicing and the jobs that move data between them, built to keep working when the other side does not.\n- AI & developer tools: AI features, MCP servers, plugins and internal tools, each built for one specific job in your product or workflow.\n- Legacy modernization & security: Older applications your business still relies on: we update dependencies, fix vulnerabilities and modernize the parts that hold the product back.\n\nService pages:\n\n- [Ruby on Rails development](https://imagineit.dev/services/ruby-on-rails-development.md): Ruby on Rails development since 2011: new Rails apps, Hotwire front ends, APIs, background jobs, and long-term maintenance. Senior-led studio in Poland.\n- [Web application development](https://imagineit.dev/services/web-application-development.md): Custom web apps, SaaS, and internal platforms in Rails, TypeScript (NestJS, Next.js), and Python (Django). We modernize legacy systems and fix vulnerabilities.\n- [Mobile app development](https://imagineit.dev/services/mobile-app-development.md): Native iOS and Android apps, and hybrid apps with React Native or Kotlin Multiplatform, connected to the same backend and APIs as your web product.\n- [API integrations and payments](https://imagineit.dev/services/api-integrations-payments.md): API integrations, Stripe payments, automated refunds, CRM write-back, and webhooks. Reliable data flows with retries and background processing.\n- [KSeF integration](https://imagineit.dev/services/ksef-integration.md): KSeF API v2 integration: FA(3) invoices, refund corrections, QR codes and retries. Experience from our collaboration with Goodylabs.\n- [AI features and MCP servers](https://imagineit.dev/services/ai-development-mcp-servers.md): Useful AI features, MCP servers, plugins, and custom AI agents built into your product and workflow. OCR, LLM search, and agent tooling.\n- [Legacy modernization and Rails upgrades](https://imagineit.dev/services/legacy-modernization.md): We upgrade Rails and dependencies, fix known vulnerabilities, and modernize older web apps step by step while they stay in production.\n\n## How we work\n\n- A working MVP, fast: We skip the long specification. AI agents write and review much of the code, a senior engineer owns the architecture, and you get something to click through early on.\n- Shaped together: The first version is where the real conversation starts. We try it together, watch how people actually use it, and change what needs changing.\n- Communication that fits your team: Mostly Slack, in the channels your team already uses. We show a demo when there is something worth showing, or whenever you ask.\n- You own the result: We set up the repositories, CI/CD and infrastructure, then hand them over. The code and the accounts are yours.\n- Confidential when y","chars":10283,"tokens":2571,"source":"alternate","token_delta":-1318}},"performance":{"score":13.5,"max":15,"status":"good","status_label":"Good","metrics":[{"label":"LCP","value":"2692 ms","status":"warn","thresholds":"Good ≤ 2.5 s · Needs improvement 2.5–4 s · Poor > 4 s","explanation":"The largest element painted after 2.5 s but before the 4 s poor boundary.","detail":"h1"},{"label":"CLS","value":"0.001","status":"pass","thresholds":"Good ≤ 0.10 · Needs improvement 0.10–0.25 · Poor > 0.25","explanation":"Layout stayed within the 0.10 target for the largest shift window.","detail":"nav (+0.001), div.header-controls (+0.001), span.wordmark-prefix (+0.000)"},{"label":"TTFB","value":"96 ms","status":"pass","thresholds":"Fast ≤ 800 ms · Slow 800–1,500 ms · Very slow > 1,500 ms","explanation":"The server sent the first byte within 800 ms."},{"label":"HTML","value":"94 KB","status":"pass","thresholds":"Small ≤ 500 KB with compression and HTTP/2+ · Large > 1 MB","explanation":"HTML is small, compressed and served over HTTP/2 or newer."},{"label":"Transfer","value":"110 KB","status":"pass","thresholds":"Good ≤ 1 MB · Needs improvement 1–2 MB · Poor > 2 MB","explanation":"Total transfer stayed at or below 1 MB."},{"label":"Requests","value":"11","status":"pass","thresholds":"Good ≤ 50 · Needs improvement 50–80 · Poor > 80","explanation":"The page made 50 or fewer requests."},{"label":"Blocking","value":"0 scripts","status":"pass","thresholds":"Good 0 scripts · Needs improvement 1–2 · Poor > 2","explanation":"No render-blocking scripts were found."}],"resources":{"status":"pass","requests":11,"bytes":109777,"by_type":{"document":25429,"script":4233,"image":80115},"cross_origin":0,"render_blocking_scripts":0,"render_blocking_styles":0,"top":[{"url":"https://imagineit.dev/_astro/tribely.Ci67t2gI_1Sx8qT.avif","type":"image","bytes":36717},{"url":"https://imagineit.dev/","type":"document","bytes":25429},{"url":"https://imagineit.dev/_astro/crawlwise-report.eipj5tVG_logUz.avif","type":"image","bytes":20237},{"url":"https://imagineit.dev/_astro/tribely.Ci67t2gI_ZUnQJR.avif","type":"image","bytes":15379},{"url":"https://imagineit.dev/_astro/crawlwise-report.eipj5tVG_ZDI5L0.avif","type":"image","bytes":7782}]}},"checks":[{"key":"agent.llms-txt","category":"agent","status":"pass","weight":2,"message":"llms.txt is present (experimental)","fix_key":"fix.llms","evidence":{"status":200,"chars":10283,"links":32,"full":true}},{"key":"agent.markdown","category":"agent","status":"pass","weight":8,"message":"Markdown endpoint is available and faithful","fix_key":"fix.markdown.route","evidence":{"status":200,"chars":10283,"similarity":0.51,"relative_links":0}},{"key":"agent.markdown-negotiation","category":"agent","status":"pass","weight":2,"message":"Markdown is advertised and negotiated correctly","fix_key":"fix.markdown.headers","evidence":{"content_type":"text/markdown; charset=utf-8","vary":"","advertised":true,"status":200}},{"key":"content.boilerplate","category":"content","status":"pass","weight":1,"message":"Main content dominates the page","fix_key":"fix.content.boilerplate","evidence":{"ratio":0.93,"link_density":0.09}},{"key":"content.consent-wall","category":"content","status":"pass","weight":1,"message":"No consent wall detected","fix_key":"fix.content.consent","evidence":{"selectors":[]}},{"key":"content.images","category":"content","status":"pass","weight":3,"message":"Content images are described and efficient","fix_key":"fix.content.images","evidence":{"images":3,"missing_alt":0,"missing_dimensions":0,"legacy_format":0,"next_gen":3}},{"key":"content.links","category":"content","status":"pass","weight":2,"message":"Internal links are crawlable and descriptive","fix_key":"fix.content.links","evidence":{"total":31,"internal":30,"external":1,"internal_nofollow":0,"internal_http":0,"empty_anchor":0,"generic_anchor":0}},{"key":"content.no-js","category":"content","status":"pass","weight":7,"message":"Main content is present without JavaScript","fix_key":"fix.content.ssr","evidence":{"raw_chars":5011,"rendered_chars":5011,"similarity":1,"containment":1}},{"key":"content.social","category":"content","status":"pass","weight":1,"message":"Social preview metadata is complete","fix_key":"fix.content.social","evidence":{"og_title":true,"og_description":true,"og_image":true,"twitter_card":"summary_large_image","image_absolute":true}},{"key":"content.structure","category":"content","status":"pass","weight":5,"message":"The document structure is extractable","fix_key":"fix.content.structure","evidence":{"mains":1,"h1":1,"headings":16,"first_heading":"h1","title_length":55,"description_length":147,"lang":"en","viewport":true,"level_skips":false}},{"key":"discovery.ai-bots","category":"discovery","status":"pass","weight":7,"message":"Search and training bots are allowed","fix_key":"fix.robots.ai","evidence":{"bots":[{"bot":"OAI-SearchBot","allowed":true,"intent":"search"},{"bot":"Claude-SearchBot","allowed":true,"intent":"search"},{"bot":"PerplexityBot","allowed":true,"intent":"search"},{"bot":"Googlebot","allowed":true,"intent":"search"},{"bot":"Bingbot","allowed":true,"intent":"search"},{"bot":"GPTBot","allowed":true,"intent":"training"},{"bot":"ClaudeBot","allowed":true,"intent":"training"},{"bot":"Google-Extended","allowed":true,"intent":"training"},{"bot":"Applebot-Extended","allowed":true,"intent":"training"},{"bot":"CCBot","allowed":true,"intent":"training"},{"bot":"Bytespider","allowed":true,"intent":"training"},{"bot":"Amazonbot","allowed":true,"intent":"training"}],"training_blocked":false}},{"key":"discovery.hreflang","category":"discovery","status":"pass","weight":1,"message":"hreflang annotations are complete","fix_key":"fix.hreflang","evidence":{"count":3,"languages":["en","pl","x-default"],"duplicates":[],"x_default":true,"self_reference":true}},{"key":"discovery.indexability","category":"discovery","status":"pass","weight":8,"message":"The page is indexable and self-canonical","fix_key":"fix.indexability","evidence":{"meta_robots":"index, follow, max-image-preview:large","x_robots_tag":"","canonical":"https://imagineit.dev/","canonical_self":true,"canonical_count":1,"noindex":false,"nofollow":false,"nosnippet":false}},{"key":"discovery.redirects","category":"discovery","status":"pass","weight":4,"message":"No redirects were needed","fix_key":"fix.redirects","evidence":{"requested_url":"https://imagineit.dev/","final_url":"https://imagineit.dev/","hops":[],"temporary":0,"final_https":true}},{"key":"discovery.resource-access","category":"discovery","status":"pass","weight":3,"message":"Googlebot can fetch CSS and JavaScript","fix_key":"fix.robots.resources","evidence":{"resources":4,"blocked":[],"robots":true}},{"key":"discovery.robots","category":"discovery","status":"pass","weight":2,"message":"robots.txt is reachable and has rules","fix_key":"fix.robots","evidence":{"status":200,"groups":1,"rules":1}},{"key":"discovery.sitemap","category":"discovery","status":"warn","weight":2,"message":"sitemap.xml has no lastmod","fix_key":"fix.sitemap","evidence":{"urls":50}},{"key":"a11y.axe","category":"freshness_a11y","status":"pass","weight":2,"message":"No critical or serious axe violations","fix_key":"fix.a11y.axe","evidence":{"violations":0,"critical":0,"serious":0,"rules":[]}},{"key":"freshness.signals","category":"freshness_a11y","status":"warn","weight":1,"message":"No freshness signal was found","fix_key":"fix.freshness","evidence":{}},{"key":"perf.caching","category":"perf","status":"pass","weight":2,"message":"HTML uses validators and cache headers","fix_key":"fix.perf.caching","evidence":{"etag":true,"last_modified":false,"cache_control":"public, max-age=0, must-revalidate"}},{"key":"perf.cls","category":"perf","status":"pass","weight":3,"message":"CLS is within the recommended range","fix_key":"fix.perf.cls","evidence":{"cls":0.0006613782703526293,"target":0.1,"cls_sources":[{"element":"nav","value":0.001},{"element":"div.header-controls","value":0.001},{"element":"span.wordmark-prefix","value":0}],"measurement":"unthrottled_lab_initial_viewport"}},{"key":"perf.lcp","category":"perf","status":"warn","weight":3,"message":"LCP needs improvement","fix_key":"fix.perf.lcp","evidence":{"lcp_ms":2692,"target_ms":2500,"lcp_element":"h1","lcp_url":null,"measurement":"unthrottled_lab"}},{"key":"perf.payload","category":"perf","status":"pass","weight":2,"message":"HTML payload is small and compressed","fix_key":"fix.perf.payload","evidence":{"bytes":94165,"truncated":false,"encoding":"zstd","protocol":""}},{"key":"perf.resources","category":"perf","status":"pass","weight":3,"message":"Page resources are within budget","fix_key":"fix.perf.resources","evidence":{"requests":11,"bytes":109777,"by_type":{"document":25429,"script":4233,"image":80115},"cross_origin":0,"render_blocking_scripts":0,"render_blocking_styles":0,"top":[{"url":"https://imagineit.dev/_astro/tribely.Ci67t2gI_1Sx8qT.avif","type":"image","bytes":36717},{"url":"https://imagineit.dev/","type":"document","bytes":25429},{"url":"https://imagineit.dev/_astro/crawlwise-report.eipj5tVG_logUz.avif","type":"image","bytes":20237},{"url":"https://imagineit.dev/_astro/tribely.Ci67t2gI_ZUnQJR.avif","type":"image","bytes":15379},{"url":"https://imagineit.dev/_astro/crawlwise-report.eipj5tVG_ZDI5L0.avif","type":"image","bytes":7782}],"measurement":"unthrottled_lab"}},{"key":"perf.ttfb","category":"perf","status":"pass","weight":2,"message":"TTFB is fast","fix_key":"fix.perf.ttfb","evidence":{"ttfb_ms":96,"region":"eu-central"}},{"key":"schema.dates","category":"schema","status":"na","weight":3,"message":"No dated structured data","fix_key":"fix.schema.dates","evidence":{"entities":4}},{"key":"schema.entities","category":"schema","status":"warn","weight":4,"message":"No page-level content entity was found","fix_key":"fix.schema.entities","evidence":{"types":["WebSite","Organization","Person","BreadcrumbList"],"content_entity":null,"author":false,"publisher":true,"same_as":true,"breadcrumb":true,"faq":false,"page":"https://imagineit.dev/services/","pages_checked":3}},{"key":"schema.parses-core","category":"schema","status":"warn","weight":8,"message":"No page-level entity was found","fix_key":"fix.schema.core","evidence":{"types":["WebSite","Organization","Person","BreadcrumbList"],"page":"https://imagineit.dev/services/","pages_checked":3}},{"key":"trust.headers","category":"trust","status":"pass","weight":2,"message":"Security headers are present","fix_key":"fix.headers","evidence":{"csp":true,"csp_report_only":false,"nosniff":true,"referrer":true,"framing":true}},{"key":"trust.https","category":"trust","status":"pass","weight":6,"message":"HTTPS and HSTS are correct","fix_key":"fix.https","evidence":{"https":true,"hsts":"max-age=31536000; includeSubDomains; preload","max_age":31536000,"mixed_content":false,"mixed_content_urls":[]}}],"audited_pages":[{"position":0,"url":"https://imagineit.dev/","final_url":"https://imagineit.dev/","status":"done","score":97.3,"grade":"A","error_code":null,"counts":{"pass":20,"warn":2,"fail":0,"na":1,"blocked":0,"error":0},"findings":[{"key":"perf.lcp","status":"warn","message":"LCP needs improvement"},{"key":"freshness.signals","status":"warn","message":"No freshness signal was found"}]},{"position":1,"url":"https://imagineit.dev/services/","final_url":"https://imagineit.dev/services/","status":"done","score":91.1,"grade":"A","error_code":null,"counts":{"pass":19,"warn":3,"fail":0,"na":1,"blocked":0,"error":0},"findings":[{"key":"schema.parses-core","status":"warn","message":"No page-level entity was found"},{"key":"schema.entities","status":"warn","message":"No page-level content entity was found"},{"key":"freshness.signals","status":"warn","message":"No freshness signal was found"}]},{"position":2,"url":"https://imagineit.dev/about/","final_url":"https://imagineit.dev/about/","status":"done","score":99.3,"grade":"A","error_code":null,"counts":{"pass":21,"warn":1,"fail":0,"na":1,"blocked":0,"error":0},"findings":[{"key":"freshness.signals","status":"warn","message":"No freshness signal was found"}]}],"priorities":[{"key":"schema.parses-core","weight":8,"reason":"No page-level entity was found"},{"key":"schema.entities","weight":4,"reason":"No page-level content entity was found"},{"key":"perf.lcp","weight":3,"reason":"LCP needs improvement"},{"key":"discovery.sitemap","weight":2,"reason":"sitemap.xml has no lastmod"},{"key":"freshness.signals","weight":1,"reason":"No freshness signal was found"}]}