[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"tag-webauthn-1":44,"tags-all":81,"search-suggestions":176},[4,20,32],{"id":5,"slug":6,"name":7,"tagline":8,"description":9,"accentFrom":10,"accentTo":11,"icon":12,"defaultLocale":13,"locales":14,"features":16,"position":19},"019fe637-3d33-714b-b57f-23e163ffca0c","dev","Web Development","Read it. Run it. Prove it.","A post a day on modern web development — most with an editable playground and a quiz that explains every answer. Free, no account needed.","violet-500","cyan-400","◇","en",[13,15],"fa",{"courses":17,"paths":17,"articles":17,"exams":18,"flashcards":18,"packages":17,"community":17,"certificates":17,"teams":17,"commerce":17},true,false,0,{"id":21,"slug":22,"name":23,"tagline":24,"description":25,"accentFrom":26,"accentTo":10,"icon":27,"defaultLocale":13,"locales":28,"features":30,"position":31},"019fe637-3dc2-754c-8657-0f175bfee7c6","lang","Languages","Learn a language the way you learn a codebase.","Grammar explained the way good documentation explains an API — one idea at a time, each with a quiz.","amber-400","⌘",[13,15,29],"es",{"courses":18,"paths":18,"articles":17,"exams":18,"flashcards":17,"packages":18,"community":17,"certificates":17,"teams":18,"commerce":18},2,{"id":33,"slug":34,"name":35,"tagline":36,"description":37,"accentFrom":38,"accentTo":39,"icon":40,"defaultLocale":13,"locales":41,"features":42,"position":43},"7b3c16f2-931d-410e-802e-e1fa4edab7de","soft","Soft Skills","The half of the job nobody wrote documentation for.","Weekly, on the parts of working life that decide more than your code does — first weeks, meetings, interviews, promotions, and the people around you. Written from what actually happens, and recorded as a podcast you can listen to on the walk.","emerald-400","teal-300","◉",[13],{"courses":18,"paths":18,"articles":17,"exams":18,"flashcards":18,"packages":18,"community":17,"certificates":18,"teams":18,"commerce":18},3,{"items":45,"meta":79},[46],{"id":47,"slug":48,"title":49,"subtitle":50,"excerpt":51,"coverUrl":52,"locale":13,"readingMinutes":53,"publishedAt":54,"viewCount":55,"likeCount":19,"commentCount":19,"author":56,"vertical":61,"topic":62,"tags":65,"_count":76,"playground":78,"hasQuiz":17,"hasPlayground":17},"01a07112-8d09-7178-b258-b899a0eb496e","webauthn-passkeys-discoverable-credentials","I Shipped 'Passwordless Login.' It Still Asked for a Username.",null,"WebAuthn's own demo code creates a credential the browser can't find on its own — so your passkey button quietly turns into a fancier security key instead of an actual passwordless sign-in. One option fixes it.","\u002Fmedia\u002Fcovers\u002Fwebauthn-passkeys-discoverable-credentials.png",6,"2026-09-10T10:57:59.771Z",24,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},"security","Security",[66,69,70,73],{"slug":67,"name":68,"color":50},"webdev","Webdev",{"slug":63,"name":64,"color":50},{"slug":71,"name":72,"color":50},"javascript","Javascript",{"slug":74,"name":75,"color":50},"webauthn","Webauthn",{"assessments":77},1,{"slug":48},{"page":77,"perPage":80,"total":77,"totalPages":77},12,[82,84,86,90,94,98,101,105,109,113,116,120,123,127,130,133,136,139,140,143,146,149,152,155,158,161,164,167,170,173],{"slug":67,"name":68,"color":50,"articles":83},88,{"slug":71,"name":72,"color":50,"articles":85},72,{"slug":87,"name":88,"color":50,"articles":89},"frontend","Frontend",69,{"slug":91,"name":92,"color":50,"articles":93},"css","Css",31,{"slug":95,"name":96,"color":50,"articles":97},"tutorial","Tutorial",19,{"slug":99,"name":100,"color":50,"articles":80},"performance","Performance",{"slug":102,"name":103,"color":50,"articles":104},"typescript","Typescript",11,{"slug":106,"name":107,"color":50,"articles":108},"react","React",10,{"slug":110,"name":111,"color":50,"articles":112},"browser","Browser",7,{"slug":114,"name":115,"color":50,"articles":53},"grammar","Grammar",{"slug":117,"name":118,"color":50,"articles":119},"node","Node",5,{"slug":121,"name":122,"color":50,"articles":119},"html","Html",{"slug":124,"name":125,"color":50,"articles":126},"programming","Programming",4,{"slug":128,"name":129,"color":50,"articles":126},"apis","Apis",{"slug":131,"name":132,"color":50,"articles":126},"accessibility","Accessibility",{"slug":134,"name":135,"color":50,"articles":43},"ai","Ai",{"slug":137,"name":138,"color":50,"articles":31},"nextjs","Nextjs",{"slug":63,"name":64,"color":50,"articles":31},{"slug":141,"name":142,"color":50,"articles":31},"async","Async",{"slug":144,"name":145,"color":50,"articles":31},"english","English",{"slug":147,"name":148,"color":50,"articles":31},"verbs","Verbs",{"slug":150,"name":151,"color":50,"articles":31},"spanish","Spanish",{"slug":153,"name":154,"color":50,"articles":31},"a1","A1",{"slug":156,"name":157,"color":50,"articles":31},"a2","A2",{"slug":159,"name":160,"color":50,"articles":31},"tenses","Tenses",{"slug":162,"name":163,"color":50,"articles":31},"turkish","Turkish",{"slug":165,"name":166,"color":50,"articles":31},"career","Career",{"slug":168,"name":169,"color":50,"articles":31},"beginners","Beginners",{"slug":171,"name":172,"color":50,"articles":31},"productivity","Productivity",{"slug":174,"name":175,"color":50,"articles":31},"discuss","Discuss",[177,178,179,180,181,182,183,184,185,186,187,188],{"slug":67,"name":68,"articles":83},{"slug":71,"name":72,"articles":85},{"slug":87,"name":88,"articles":89},{"slug":91,"name":92,"articles":93},{"slug":95,"name":96,"articles":97},{"slug":99,"name":100,"articles":80},{"slug":102,"name":103,"articles":104},{"slug":106,"name":107,"articles":108},{"slug":110,"name":111,"articles":112},{"slug":114,"name":115,"articles":53},{"slug":121,"name":122,"articles":119},{"slug":117,"name":118,"articles":119}]