[{"data":1,"prerenderedAt":373},["ShallowReactive",2],{"project-42256104":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":45,"post_text":48,"what":49,"said":93,"maker_in_thread":183,"shape":196,"grid":200,"attempts":335,"same_week":336,"maker_shows":35,"maker_hidden":366,"reader_version":367,"card":368},"42256104","TeaTime","distributed book library powered by SQLite, IPFS and GitHub","title","Show HN: TeaTime – distributed book library powered by SQLite, IPFS and GitHub","https:\u002F\u002Fgithub.com\u002Fbjesus\u002Fteatime","github.com","yoavm",1732715780,2024,307,55,196,3515,6,"legend","learning_science","distributed book library","web_app",[24,25,26,27,28],"sqlite","ipfs","book library","libgen","static site","curious",0.15,{"positive":32,"neutral":33,"mixed":34,"critical":35},7,16,0,4,27,{"execution":38,"idea":40,"privacy":41,"docs":43,"design":44},{"positive":39,"critical":39},2,{"positive":39,"critical":34},{"positive":42,"critical":39},1,{"positive":34,"critical":34},{"positive":34,"critical":34},[46,34,47,47,47,46,47,47,34,46,46,42,34,42,34,34,34,47,42,47,34,47,46,34,46,34,47,47,34,47,47,34,34,34,46,34,34,47,47,42],5,3,"Recently there seem to be a surge in SQLite related projects. TeaTime is riding that wave...\n\nA couple of years ago I was intrigued by phiresky's post[0] about querying SQLite over HTTP. It made me think that if anyone can publish a database using GitHub Pages, I could probably build a frontend in which users can decide which database to query. TeaTime is like that - when you first visit it, you'll need to choose your database. Everyone can create additional databases[1]. TeaTime then queries it, and fetches files using an IPFS gateway (I'm looking into using Helia so that users are also contr",{"problem":50,"audience":56,"pricing":56,"motivation":57,"time_to_build":56,"stack":61,"openness":90,"stage":91,"team_size":92},{"value":51,"source":52,"evidence":53},"Searching and reading books from distributed databases without a server or user accounts","maker",[54],{"id":55},"post",null,{"value":58,"source":52,"evidence":59},"Riding the surge of SQLite projects and building a frontend where users choose which database to query",[60],{"id":55},[62,66,70,74,80,84],{"value":63,"source":52,"evidence":64},"SQLite",[65],{"id":55},{"value":67,"source":52,"evidence":68},"IPFS",[69],{"id":55},{"value":71,"source":52,"evidence":72},"GitHub Pages",[73],{"id":55},{"value":75,"source":52,"evidence":76},"Nuxt",[77],{"id":78,"by":11,"text":79},"42260709","> Do static sites built with sphinx-build or jupyter-book or hugo or other jamstack static site generators work with TeaTime? I guess it depends on what you mean by \"work with…",{"value":81,"source":52,"evidence":82},"sql.js-httpvfs",[83],{"id":78,"by":11,"text":79},{"value":85,"source":52,"evidence":86},"PDF.js",[87],{"id":88,"by":11,"text":89},"42260894","Interesting - I'm kinda counting on PDF.js, which is used for PDF rendering, on doing it safely, but of course that doesn't always have to be the case. Do you have any thoughts…","open_source","launched","unknown",{"praise":94,"objections":113,"requests":131,"questions":145,"alternatives":164},[95,103],{"value":96,"source":97,"evidence":98},"Privacy-respecting design with no users, cookies or tracking","commenter",[99],{"id":100,"by":101,"text":102},"42256210","viborcip","\"Everything is done in the browser - no users, no cookies, no tracking. LocalStorage and IndexedDB are used for saving your last readings, your position in each file.\" I love…",{"value":104,"source":97,"evidence":105},"Clever decoupling of UI from database and files",[106,110],{"id":107,"by":108,"text":109},"42262762","nyolfen","beautiful! i made a much crappier version of the same kind of thing a year or two ago with a manually converted libgen db from annas-archive's index, but the best i could come up…",{"id":111,"by":11,"text":112},"42260724","Libgen is one of the databases that are currently available (and was probably a good fit because they already had their files on IPFS), but I think that this architecture, in…",[114,124],{"value":115,"source":97,"evidence":116},"Malicious database repos could be used to distribute harmful files",[117,121],{"id":118,"by":119,"text":120},"42260203","mushufasa","> The databases used in TeaTime are GitHub repositories tagged with the teatime-database topic, which are published on GitHub Pages. Couldn't this be a security issue, for a bad…",{"id":122,"by":119,"text":123},"42260803","there's been several attacks recently where a bad actor takes over a repo where the original maintainer wants to take a step back, then launch a supply chain attack. in recent…",{"value":125,"source":97,"evidence":126},"IPFS gateway access fails with CORS errors for some files",[127],{"id":128,"by":129,"text":130},"42266318","garganzol","It does not work for me. For example: > Access to fetch at 'https:\u002F\u002Fbafykbzacedvzdo4hru3wul5excjthwjuz5ggd6jcs4wg77tg7bkn3c7hlvohq.ipfs.dweb.link\u002F' (redirected from…",[132,139],{"value":133,"source":97,"evidence":134},"Browse feature to explore database contents",[135],{"id":136,"by":137,"text":138},"42262361","sram1337","I don't know what's in the database, so I don't know what to search for. How about a browse feature?",{"value":140,"source":52,"evidence":141},"Support for BitTorrent in the browser",[142],{"id":143,"by":11,"text":144},"42260865","Yeah - the desire to have TeaTime run as a normal website. BitTorrent doesn't run over HTTP, unless you use WebTorrent, which most BitTorrent clients aren't 100% compatible with.…",[146,157],{"value":147,"source":97,"evidence":148},"Whether IPFS requires a server running",[149,153],{"id":150,"by":151,"text":152},"42263888","lakomen","I absolutely don't understand this. Doesn't ipfs require a server running? Where is the server code?",{"id":154,"by":155,"text":156},"42265625","user_james92","IPFS needs server running or am I wrong?",{"value":158,"source":97,"evidence":159},"Whether static site generators like Hugo or Sphinx work with TeaTime",[160],{"id":161,"by":162,"text":163},"42260094","westurner","Do static sites built with sphinx-build or jupyter-book or hugo or other jamstack static site generators work with TeaTime? sphinx-build:…",[165,169,176],{"value":166,"source":97,"evidence":167},"Datasette and datasette-lite",[168],{"id":161,"by":162,"text":163},{"value":170,"source":97,"evidence":171},"Pear P2P framework",[172],{"id":173,"by":174,"text":175},"42261725","aeyes","The Pear P2P framework might be worth a look if you want to get off of GitHub and turn it into a truly distributed system. If the index must be on GitHub then what good is it to…",{"value":177,"source":97,"evidence":178},"OrbitDB",[179],{"id":180,"by":181,"text":182},"42259761","mdaniel","> (I'm looking into using Helia so that users are also contributing nodes in the network) I had to look that term up \u003Chttps:\u002F\u002Fgithub.com\u002Fipfs\u002Fhelia#readme> but while sniffing…",{"comments":184,"answered":185,"key":186},18,13,[187,190,193],{"id":188,"text":189},"42263810","Thanks! I really wanted to use verified-fetch, but it seemed like it doesn't really support all types of CIDs? In my case, most of the files use blake2b-256, and the last time I…",{"id":191,"text":192},"42264603","The main reason I wanted to support it is that it happens to be what Library Genesis uses. I'll have a look into passing these custom headers! Would definitely be more elegant…",{"id":194,"text":195},"42263177","Thanks, I shall have a look into that. Technically the index too can live on IPFS, but the real challenge was how to know which databases exist, and where. This is what I'm using…",{"commenters":197,"max_depth":46,"maker_replies":184,"first_comment_mins":198,"lifespan_hours":199},25,15,142,[201,205,207,209,210,213,215,217,221,223,225,228,230,233,235,237,239,242,243,247,250,253,257,258,261,263,265,269,271,274,277,282,284,289,291,294,298,299,300,301,303,305,307,309,311,313,315,318,319,321,325,328,329,331,333],[202,34,46,203,204,34],"42263768","maker\u002Fpositive\u002Fexecution","2color",[188,34,34,206,11,42],"maker\u002Fneutral\u002Fexecution",[208,34,47,206,204,34],"42263866",[191,34,34,206,11,42],[211,34,47,212,204,34],"42264937","project\u002Fneutral\u002Fexecution",[173,42,47,214,174,34],"project\u002Fneutral\u002Fidea",[194,42,34,216,11,42],"maker\u002Fneutral\u002Fidea",[218,42,46,219,220,34],"42263602","project\u002Fpositive\u002Fexecution","boramalper",[180,39,47,222,181,34],"project\u002Fneutral\u002Fnone",[224,39,34,216,11,42],"42259819",[226,39,47,214,227,34],"42263310","zwnow",[229,39,34,216,11,42],"42263476",[231,39,46,232,227,34],"42273990","project\u002Fpositive\u002Fnone",[234,47,47,222,220,34],"42263631",[100,35,46,236,101,34],"project\u002Fpositive\u002Fprivacy",[118,46,42,238,119,34],"project\u002Fcritical\u002Fprivacy",[240,46,34,241,11,42],"42260663","maker\u002Fneutral\u002Fprivacy",[122,46,42,238,119,34],[244,46,34,245,246,34],"42260892","commenter\u002Fneutral\u002Fnone","cicko",[248,46,34,245,249,34],"42261782","taneq",[251,46,34,245,252,34],"42261908","crest",[254,46,34,255,256,34],"42262681","commenter\u002Fneutral\u002Fprivacy","samatman",[88,46,34,241,11,42],[259,46,47,260,119,34],"42261464","project\u002Fneutral\u002Fprivacy",[128,18,42,262,129,34],"project\u002Fcritical\u002Fexecution",[264,18,34,206,11,42],"42266600",[266,32,47,267,268,34],"42259766","project\u002Fneutral\u002Fdocs","slagfart",[270,32,34,267,11,42],"42259777",[136,272,47,273,137,34],8,"project\u002Fneutral\u002Fdesign",[275,272,34,276,11,42],"42263236","maker\u002Fneutral\u002Fdesign",[278,279,46,280,281,34],"42262379",9,"project\u002Fpositive\u002Fidea","pizza",[283,279,34,241,11,42],"42263229",[285,286,34,287,288,34],"42295937",10,"other\u002Fneutral\u002Fnone","evolve2k",[107,290,46,280,108,34],11,[292,290,34,293,11,42],"42263204","maker\u002Fpositive\u002Fnone",[295,296,47,214,297,34],"42260669",12,"clueless",[111,296,34,216,11,42],[161,185,47,214,162,34],[78,185,34,206,11,42],[302,185,47,212,162,34],"42264274",[304,185,34,206,11,42],"42264481",[150,306,47,212,151,34],14,[308,306,34,245,204,34],"42263912",[310,306,34,245,151,34],"42287019",[312,306,34,245,204,34],"42305037",[314,306,34,206,11,42],"42263997",[316,198,46,232,317,34],"42256306","noamikotamir",[154,33,47,212,155,34],[320,33,34,206,11,42],"42265712",[322,323,34,287,324,34],"42264854",17,"rausr",[326,184,47,214,327,34],"42260809","evantbyrne",[143,184,34,216,11,42],[330,184,47,212,204,34],"42263813",[332,184,42,262,220,34],"42265062",[334,184,34,245,204,34],"42265999",[],[337,342,347,352,357,361],{"id":338,"name":339,"points":340,"category":341},"42254156","Intenty",817,"productivity",{"id":343,"name":344,"points":345,"category":346},"42212644","5 Million Devs",616,"games",{"id":348,"name":349,"points":350,"category":351},"42208383","llama3_interpretability_sae",579,"ai",{"id":353,"name":354,"points":355,"category":356},"42258540","Feels Like Paper",265,"creative",{"id":358,"name":359,"points":360,"category":346},"42212071","Rebels in the sky",242,{"id":362,"name":363,"points":364,"category":365},"42200099","Monty",236,"hardware",false,"v2",{"id":369,"name":5,"line":6,"ai":366,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":30,"top":18,"kw":370,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":371,"url":9,"mix":372,"praise":96,"objection":115,"sub":21},42256104,[24,25,26,27,28],"5033353305510100031303505033033000500331",[32,33,34,35],1794036664945]