AI 资讯
[Showoff Saturday] Prose reader, a reading system engine
Hey everyone, I’m the author of prose, an MIT-licensed SDK/engine for building reading apps: https://prose-reader.com/ It’s a TypeScript, web-based reader engine that can be used to build anything from a simple image/archive-based comic or manga reader to a more complex EPUB reader with navigation, search, annotations, gestures, zoom, pagination, and custom reading behavior. It supports EPUB and archive-style formats like ZIP/CBZ/CBR, and can run in the browser or inside mobile apps through WebView/React Native. One of the main ideas behind Prose is its enhancer system , which works like a plugin system. Enhancers let you add or modify reader capabilities without changing the core engine, so apps can build their own UX and features on top. The project has been around for about 6 years, but I haven’t promoted it much. It’s also used in Oboku , an open-source reading app I’ve been building: https://oboku.me/ AI disclaimer: I have about 15 years of experience as a developer, and I use AI as a tool to help me iterate faster and improve quality, not as “vibe coding” or a replacement for my own judgment. It has helped me deal with many small problems and move the project forward faster. I’m looking for developers who might be interested in trying it, giving ideas, or providing feedback to help improve it. GitHub: https://github.com/mbret/prose-reader Docs: https://doc.prose-reader.com/ Demo: https://demo.prose-reader.com/ Discord: https://discord.com/invite/dffDEgwNc5 Would love to hear what you think. submitted by /u/yabai90 [link] [留言]
AI 资讯
I built a web app where you generate 3D objects made up of separate, logically connected parts (instead of monolithic blobs generated by standard AI generators)
Link: https://nova3d.xyz It's free but you'll need to bring your own API Key (BYOK). For open source enthusiasts, check out the github repo at: https://github.com/RareSense/Nova3D This project is a big deal if you see limitations of current AI 3D generators (like Meshy or Tripo). They produce solid, monolithic 3D objects that look good but are practically useless, because: - Want to change the arm of a robot you generated? Regenerate the entire asset. - Want to edit something manually? The whole thing collapses because it's not actually structured. - Want to rig or animate it for a game? Can't easily do that, because it’s a dead, monolithic blob instead of a functional, modular asset. This is a flutter front-end with a python, fastAPI and headless blender back-end. Would love to get community feedback! submitted by /u/mhb-11 [link] [留言]
AI 资讯
I've been QA-testing indie and AI-built sites this week — the same handful of things are broken on almost all of them
The same issues keep showing up — the kind that look fine but quietly cost signups or search ranking. Sharing in case it helps your own site: Forms with placeholder text instead of real labels. "Email"/"Password" shown inside the box looks labeled, but it isn't — the text vanishes when you type, and screen readers + browser autofill don't read it. Quiet signup killer. Heading levels that skip. Jumping from an H1 straight to an H3 with no H2. Invisible to the eye (it's in the markup), but it confuses screen readers and how Google reads your page. A main CTA that doesn't actually go anywhere. More common than you'd think — the button looks fine but the click loops or dead-ends. Worth literally clicking your own "Get started" and following it through. Missing title / meta description. Google then writes its own (usually worse) snippet for you, costing click-throughs. No social preview tags (Open Graph). Share your link on X or Reddit and it shows a blank, ugly preview instead of a title + image. Founders share links constantly, so this one stings. Most take 5 minutes to fix once you know they're there. Full disclosure: I built a tool that checks for this ([Sweep]( http://www.usesweep.app) ) — happy to run yours and send the report if you drop a URL below. But honestly, just checking these five by hand is worth an afternoon. submitted by /u/Hairy_Wash_9086 [link] [留言]
开发者
Built free app for game design and worldbuilding
Hi! I want to share a project that I work for a while. It started from idea to get rid off manual copying data from game design documents to game engine. Here you can define your game objects, their props, relations and everything will be stored in structural JSON format that can be read by Unity, Godot, Unreal and other engines. What we have now? construct **wiki-like documents **using a block editor and template system (markdown is supported too) design dialogues of your game in special graph editor create maps and prototype levels on canvas store and manage database of game objects use created objects inside engine directly or export data to customizable data formats (arbitrary JSON, CSV) Made it free and open source. Please try (have Windows and Mac builds) and give your feedback Source code: https://github.com/ImStocker/ims-creators Itch.io: https://nordth.itch.io/imsc-desktop
AI 资讯
You Have a Free AI Model Sitting in Chrome Right Now
Hello, I'm Maneshwar. I'm building git-lrc, a Micro AI code reviewer that runs on every commit. It is free and source-available on Github. Star git-lrc to help devs discover the project. Do give it a try and share your feedback for improving the project. You might not have noticed, but Chrome quietly started shipping a local AI model called Gemini Nano bundled right into the browser. No API keys. No cloud round-trips. No per-token cost. It just runs on your machine. The interface to talk to it is called the Prompt API , and it landed in Chrome 138. I spent some time going through the full API surface and built a playground that lets you experiment with every feature session management, streaming, structured output, multimodal input, response prefixing, and more in one page. This post walks you through all of it. Why does this matter? On-device AI flips the usual tradeoffs: Free at runtime — the model runs on the user's hardware, not your servers Private by default — no data leaves the device once the model is downloaded Works offline — after the initial download, no network required Low latency — no round-trip to a data centre The catch is that Gemini Nano is a small model. It's great for classification, summarization, Q&A on focused content, and structured extraction. It won't replace GPT-4 for complex reasoning. Think of it as a smart, free, always-available layer you can add on top of your existing product. Enabling the API The Prompt API isn't on by default in all Chrome builds. Enable two flags: Step 1 — Go to chrome://flags/#optimization-guide-on-device-model and set it to Enabled BypassPerfRequirement . Step 2 — Go to chrome://flags/#prompt-api-for-gemini-nano and enable both the base API and the multimodal option. Relaunch Chrome. Then visit chrome://on-device-internals to check the model download status. First use will trigger a download — Gemini Nano is a few gigabytes. The Playground I put together a single-file HTML playground that covers the entire API
AI 资讯
I created a fork of GunDB and rewrote it in TypeScript using Vibe Code
Inspired by a similar project called GenosDB and Cloudflare’s initiative to rebuild Next.js, I decided to rebuild GunDB with a modern coding style, incorporating improvements and addressing shortcomings in the original technology. I used the OpenCode tool with the Big Pickle model to rewrite the project in a new graph database called Garfo (the Portuguese word for “fork”), and I was impressed with the results and its practical applications. In this article, I’ll explain the technology and its improvements over GunDB. Introduction Garfo is a modern, browser-first fork of GUN.js — the decentralized, offline-first graph database. A fork of the original project that keeps the familiar GUN graph API while bringing meaningful improvements to the modern JavaScript ecosystem. Why a Fork? GUN.js is a revolutionary technology — a graph database that syncs in real time, works peer-to-peer, resolves conflicts automatically, and runs in the browser. However, the JavaScript ecosystem has evolved. TypeScript has become the standard, ES modules are the norm, and new transport layers like Nostr have emerged as promising decentralized protocols. Garfo was born to fill these gaps: a GUN rewritten with modern typing, designed with the browser as a first-class citizen, and with native support for the Nostr protocol. Key Features Familiar Graph API If you've used GUN before, you'll feel right at home. Garfo exposes the same chainable API: import Garfo from ' garfo ' ; const db = new Garfo ({ localStorage : true }); db . get ( ' users ' ). get ( ' alice ' ). put ({ name : ' Alice ' , status : ' online ' }); db . get ( ' users ' ). get ( ' alice ' ). on ( profile => { console . log ( ' Update: ' , profile ); }); All the classic methods are there: get() , put() , set() , on() , once() , map() . Optional Nostr Transport This is one of the most exciting additions. Garfo can use Nostr relays as a transport layer, allowing peers to exchange graph messages through public or private relays: const
AI 资讯
6 Advanced JavaScript Questions That Separate Seniors from Mid-Levels
1. Stale closure & primitive capture What is the output of the following code? function createIncrement () { let count = 0 ; const message = `Count is ${ count } ` ; function increment () { count ++ ; } function log () { console . log ( message ); } return { increment , log }; } const { increment , log } = createIncrement (); increment (); increment (); log (); Test your understanding of closures, lexical scope, and primitive value capture. ✅ Output Count is 0 🧠 Explanation This is a classic stale closure trap — but not in the way most developers expect. Step-by-step execution: createIncrement() is invoked → new lexical environment created: count = 0 (mutable binding) message = "Count is 0" (primitive string, interpolated immediately at assignment) Inner functions increment and log are defined. Both close over the same lexical environment. increment() is called twice: count mutates: 0 → 1 → 2 ✓ This works as expected. log() is called: It references the variable message message still holds the original string value "Count is 0" The template literal was evaluated once, at the moment of assignment — not re-evaluated when log() runs. 🔑 Core Concept > Closures capture variables , not expressions . > But if a variable holds a primitive value (string, number, boolean), that value is fixed at assignment time. message is not a live reference to count . It is a snapshot . 🛠 How to fix it (if dynamic output is desired) Re-evaluate the template literal inside log() : function log () { console . log ( `Count is ${ count } ` ); } 🎯 What this question tests Concept Why it matters Template literal evaluation timing They run at assignment, not at access Primitive vs reference types Primitives are copied by value; objects/arrays are referenced Closure capture semantics Closures close over bindings, but the value of a primitive is immutable once assigned Mental model of "live" variables Not all variables in a closure are "live views" — only the bindings themselves are 2. JavaScript co
AI 资讯
How to build your professional network as a developer — authentic strategies
How to build your professional network as a developer — authentic strategies Building a Genuine Professional Network in Tech: A Practical Guide for Introverts and Extroverts Networking in tech isn’t about collecting business cards or forcing yourself to “work the room.” It’s about building real relationships with people you can learn from, collaborate with, and support over the long term. Whether you’re an introvert who prefers deep one-on-one conversations or an extrovert who thrives in crowds, you can build an authentic network that opens doors to mentorship,Jobs, collaborations, and career growth. Redefine Networking: It’s About Relationships, Not Transactions Forget the image of awkward name tags and empty promises to “grab coffee sometime.” Real networking is: Swapping war stories about debugging nightmares Sharing a job posting with someone who’d be a great fit DMing a speaker to say their talk inspired you Helping someone solve a problem without expecting anything back Quality over quantity isn’t just a buzzword-it’s your career strategy. You need 5-10 real connections, not hundreds of superficial contacts. Leverage Twitter (X), LinkedIn, and Dev Communities Effectively Twitter/X for Developer Networking Dev Twitter is alive and vibrant. Use it to: Share what you’re learning (builds credibility) Comment thoughtfully on others’ posts (starts conversations) DM speakers after webinars to say you enjoyed their talk Join tech conversations using relevant hashtags (#100DaysOfCode, #BuildInPublic) LinkedIn Profile Optimization Write a clear headline that explains what you do and what you’re curious about Share project updates, lessons learned, or thoughtful commentary on industry trends Join niche developer groups related to your tech stack Send personalized connection requests mentioning something specific you admired about their work Developer Communities (Discord, GitHub, Open Source) Join Discord servers for your favorite languages/frameworks Contribute to open
AI 资讯
I made a game where you draw country borders from memory
Hi r/webdev ! I've been building my geography games site for a while now, and I just added a new game I wanted to share with you called Draw the Country . The idea is simple: you get a country name and a blank canvas, you sketch the border, and then the real outline slides over your drawing so you can see how close you got. You can play freehand, or draw with border anchors guiding you if you want it easier or you just want to learn. There's also a daily freehand challenge same country for everyone, every day. It's completely free. No ads, no sign-up. It's built with Nuxt, Vue, Tailwind, and Supabase. Check it out: https://www.geographygames.net/draw-country Any feedback is appreciated and I hope you enjoy it! PS: The video is recorded on my laptop so drawing with the trackpad is a bit tricky. submitted by /u/ExtremeMotor3772 [link] [留言]
AI 资讯
A tool for developers
Hello. I have launched https://devtools.aarushnaik.co.uk , a tool for developers to minimise the amount of tabs devs have open. It has a lot of frequently used tools like Regex Checker, JSON Formatters and lots more. It is completely free with no hidden costs (if you would like to support me, there is a Buy Me A Coffee button on the website). If you have any suggestions, please use the google form on the website to report bugs, give feature suggestions and more! Thanks, Aarush. submitted by /u/Extreme_Insurance334 [link] [留言]
AI 资讯
[Showoff Saturday]I rebuilt AOL Instant Messenger in the browser with real-time messaging
I built WebAIM — a fully browser-based recreation of AOL Instant Messenger, the chat app that defined the internet for a whole generation. Sign in with a screen name, build your buddy list, blast someone with a "lol brb," set a cryptic away message quoting your favorite band, pick a buddy icon, join a chat room, and actually talk to real people in real time — all with the authentic Windows 98 look, classic door-knock sounds, and every bit of the nostalgia. What's under the hood: - Real-time messaging powered by Firebase - Buddy lists, groups & online presence - Away messages with auto-reply (and the classic %n, %d, %t variables) - Buddy icons & editable profiles - Group chat rooms - The actual AIM sounds - Full Windows 98 desktop UI — taskbar, desktop icons, start menu, the works submitted by /u/RancidMilkMan [link] [留言]
AI 资讯
I made a tiny website about stuff my dog loves
Hey guys For my dog Viggo's 6th birthday, I got the idea to make a website as a celebration of him. It started with a couple of short animations, and then I just kept going because it was so much fun. The site is intentionally simple. No accounts, AI, or endless scrolling. Just a bunch of tiny looping moments. Tech-wise it's built with React, Next.js, SQLite, CSS Modules, and pixel art created in Aseprite. I'd love to hear what you think! submitted by /u/Individual_Health1 [link] [留言]
AI 资讯
PostPilot 1.5.6 - Sequence Flow, Command Palette, Collection Search & More
Sequence Flow Hi r/webdev , I've been shipping a series of updates to PostPilot over the last few releases (1.5.1 → 1.5.6). Main additions: Sequence Flow Build multi-request workflows from any collection Reorder execution steps Execute the entire flow with one run Useful for auth flows, setup requests, API testing, and repeated debugging workflows Command Palette Quick access to actions and navigation from anywhere in the workspace Collection Search Search kits, folders, and collections from the sidebar Supports method + name matching (e.g. get user ) Variable Extraction Extract values directly from JSON responses into workspace variables Automatically generates the JSONPath Desktop Improvements Auto Update support Close-app confirmation dialog Smarter table column width estimation Improved Sequence Flow collection loading Better responsive behavior in smaller windows Recent additions from earlier releases: MongoDB write operations JSON comparison mode SSL support for self-signed certificates Collection organization improvements PostPilot is a local-first API client, database client, and JSON inspector. Project: https://www.postpilot.dev Changelog: https://www.postpilot.dev/changelog Feedback is welcome, especially around Sequence Flow workflows and API testing use cases. submitted by /u/lactranandev [link] [留言]
AI 资讯
Found an impersonation scam on indeed
Applied to this job. Googled the company, it's a real company. Fishy website but whatever. Got an email from the job posting to do a coding test. It's a google doc with open read access pointing to a figma file with open read access. It says to submit fully coded layouts to a random github user. That user profile is listed as located in Ukraine. If you go to company page on Indeed, it's unclaimed. Yet a person is messaging me via a job post associated with the unclaimed profile, leading me to believe it's the company. If you go to the company's real website jobs page, this job is not listed at all. Indeed in making it possible for people to easily impersonate companies and try to get free work, and who knows what else. STAY WOKE Link to google docs "test" https://docs.google.com/document/d/1lkbS_Mw655_fZbHuABLLQ9vyX5OhcWrO4o4_p53AH-0/edit?tab=t.0 Link to figma: https://www.figma.com/design/7SgqDtl84sAJisWNkZ41bP/Sample-Design?node-id=0-1&p=f&t=AcL8p49tCHnKvHfN-0 Link to git hub profile https://github.com/sharomet Real company's job page: https://lendingpad.com/lendingpad-corp-jobs submitted by /u/notgoingtoeatyou [link] [留言]
AI 资讯
Run Aider on Ollama, Bedrock, or Any LLM Provider — One Gateway, Every Model
Aider is the best terminal AI coding tool I've used. But by default it sends every diff through your OpenAI or Anthropic key, which gets expensive fast on real refactors — a single 100-file repo map can torch a few dollars before Aider even reads your prompt. This post shows how to run Aider against any LLM provider — Ollama for free local runs, OpenRouter for mixed-provider routing, AWS Bedrock for the enterprise plate — through a single OpenAI-compatible endpoint. I'll use Lynkr , the self-hosted gateway I maintain, but the pattern works with any OpenAI-compatible proxy. Full disclosure: I build Lynkr. I'll point out where it loses to LiteLLM and OpenRouter further down so you can make an honest call. The setup in three commands # 1. Start the gateway npx lynkr@latest # 2. Point Aider at it export OPENAI_API_BASE = http://localhost:8081/v1 export OPENAI_API_KEY = any-value # 3. Run Aider with any model name Lynkr knows about aider --model openai/gpt-4o That's it. Aider speaks the OpenAI Chat Completions protocol; Lynkr speaks it back and quietly translates the call to whichever upstream provider you've configured (Ollama, Bedrock, Anthropic, Azure, OpenRouter, Databricks, llama.cpp, LM Studio, ...). Aider has no idea it's talking to a router. Why bother? The cost math Aider's own leaderboard shows GPT-4o and Claude 3.5 Sonnet at the top — but you don't need a $3-per-million-tokens model to rename a variable. You need it for the architecture decisions. Lynkr's tier routing splits the work: Aider call type Routes to Cost Repo map summarization qwen2.5-coder:7b (Ollama, local) $0 File edits, single-function diffs gemini-flash-1.5 (OpenRouter) ~$0.075/M Architecture / multi-file refactors claude-3.5-sonnet (Anthropic) $3/M On a typical 4-hour Aider session, 80–90% of the calls are repo-map and small-diff calls. Routing those to local + cheap models while keeping Claude Sonnet for the hard reasoning has cut my own Aider spend by roughly 70%. Your mileage will vary base
AI 资讯
BAIXAR VÍDEO DO YOUTUBE
Criei um gerenciador de downloads desktop em Python e quero feedback da comunidade! O PyFlowDownloader é um app desktop feito com Python + PySide6 que usa yt-dlp para baixar vídeos e áudios de forma assíncrona do youtube. Algumas coisas que ele já faz: Fila de downloads com progresso em tempo real Cancelamento de downloads ativos ou pendentes Suporte a MP4 e MP3, de 144p até 1080p Histórico com exportação para CSV Interface desktop com tema visual via QSS Build para Windows via PyInstaller + pipeline de release no GitHub Actions Está na versão v0.3.0 e ainda tem muito espaço pra crescer. Repositório: https://github.com/Vinny00101/PyFlowDownloader Se você puder **testar e deixar sua opinião nos comentários, ficaria muito grato! Quer saber: O que achou da experiência de uso? Algum bug que encontrou? O que você adicionaria ou melhoraria no projeto? Todo feedback é bem-vindo!
AI 资讯
Spent some time rewriting my browser-based tool to make scanned PDFs searchable
This was my very first side project 3 years ago. I guess I have a soft spot for it, because this is actually my 3rd time completely rewriting it from scratch. The new version turns flat scanned PDFs into searchable files, or converts photos of text into editable Word docs. It runs client-side for privacy (except for ai features), and the core OCR features are completely unlimited (no account required). → https://olocr.com submitted by /u/Embarrassed_Ad719 [link] [留言]
工具
GDPR plugins and self-developed solution
Hi everyone, I want to verify if I'm missing anything. I am making a small restaurant website and I want to make it comply with German GDPR. I notice there are solutions like Cookiebot. I was wondering if we can make all of the compliance stuffs by ourselves, or if these 3rd party solutions have something superior that we cannot execute on our own? Thanks submitted by /u/leon8t [link] [留言]
开发者
I built a site that shows you what cities actually look like, not only the famous spots.
https://cityknow.vercel.app Whenever I look up a city in Google Maps, I mostly see only the same touristic landmarks. However, I wanted to know what the actual city looks like, like the neighbourhoods, side streets, the mundane stuff. So I built CityKnow. You search a city, and get a grid of random street-level images arranged by distance from the center (inner rings show the core, outer rings show the suburbs). Would love any feedback! submitted by /u/BarisSayit [link] [留言]
AI 资讯
Three TODOs, three weeks, one weekend: finishing pq v0.14
This is a submission for the GitHub Finish-Up-A-Thon Challenge What I Built pq — jq for Parquet. A 50 MB Rust single binary that wraps DuckDB's query engine in a jq-style expression DSL, optimized for terminal one-liners and unix pipes. $ pq sales.parquet 'group_by .country | sum .revenue | top 3 by sum_revenue' ┌─────────┬─────────────┐ │ country ┆ sum_revenue │ ╞═════════╪═════════════╡ │ US ┆ 19065.00 │ │ FR ┆ 999.99 │ │ DE ┆ 312.00 │ └─────────┴─────────────┘ Where it started. I work in adtech. I look at parquet files dozens of times a day — campaign deliveries, partner exports, audience snapshots. Every existing option was painful: Tool Pain pyarrow / pandas 5-second cold start, 200 MB virtualenv parquet-tools JVM, slow, no query support pqrs Inspector only — can't filter or project duckdb CLI Great engine, but SELECT email FROM 'file.parquet' WHERE country='US' is too verbose to type 50 times a day Spark Are you serious pq is the tool I actually want — single binary, no JVM, no Python, jq-style syntax for piping into the rest of the unix toolbox. It's been my default cat for parquet since v0.5. Demo Repo : github.com/thehwang/parq Latest release : v0.14.0 (this submission) Install : brew install thehwang/parq/pq Tutorial : doc/tutorial.md — 30-minute hands-on walkthrough A taste of what shipped in v0.14: # Streaming JSON output (was the only buffered format until v0.14) $ pq big.parquet '.id, .country' -o json | head -c 200 # returns instantly even on a 40 GB file # Schema-drift gate for CI $ pq diff baseline.parquet candidate.parquet # Schema diff - a: ` baseline.parquet ` - b: ` candidate.parquet ` ## Added (1) | column | type | nullable | |-----------|---------|----------| | ` country ` | VARCHAR | yes | $ echo $? 1 # exits non-zero on drift, slots into CI without scripting And the new TUI Explain panel — press capital E for EXPLAIN ANALYZE , get row-group pruning per scan (this is exactly the panel you see on the cover image at the top of this post): Expla