[{"data":1,"prerenderedAt":818},["ShallowReactive",2],{"article:how-i-built-a-personal-knowledge-wiki-with-claude-code":3,"\u002Fblog\u002Fhow-i-built-a-personal-knowledge-wiki-with-claude-code-surround":807},{"id":4,"title":5,"author":6,"body":7,"date":796,"description":797,"extension":798,"image":799,"meta":800,"minRead":148,"navigation":132,"path":801,"published":132,"seo":802,"stem":803,"tags":804,"__hash__":806},"blog\u002Fblog\u002Fhow-i-built-a-personal-knowledge-wiki-with-claude-code.md","How I Built a Personal Knowledge Wiki with Claude Code","Baljeet Singh",{"type":8,"value":9,"toc":780},"minimark",[10,14,17,25,28,33,36,47,54,64,70,74,77,83,98,105,109,112,371,378,382,385,391,396,465,468,472,483,523,526,530,533,537,540,544,547,553,556,559,617,620,624,627,632,637,642,649,660,664,667,691,697,701,707,713,722,728,734,738,741,767,770,773,776],[11,12,13],"p",{},"I had thousands of notes in Google Keep. Years of saved articles in Feedly. Dozens of ebooks. Hundreds of app ideas in Notion. Bookmarks, watch history, blog posts, and course material scattered across a dozen apps.",[11,15,16],{},"I never looked at any of it.",[11,18,19,20,24],{},"Then Andrej Karpathy posted about using AI to maintain a personal knowledge base — just flat markdown files and a schema. That weekend, I built one with Claude Code. Two days later, I had a 50-page cross-referenced wiki generated from thousands of source files, and for the first time I could actually ",[21,22,23],"em",{},"ask questions"," against everything I've ever saved.",[11,26,27],{},"Here's exactly how I did it.",[29,30,32],"h2",{"id":31},"the-architecture-three-layers","The Architecture: Three Layers",[11,34,35],{},"The whole system is three things:",[37,38,43],"pre",{"className":39,"code":41,"language":42},[40],"language-text","raw\u002F                  # Your source material. Never modified by AI.\nwiki\u002F                 # Structured pages. AI owns this entirely.\nCLAUDE.md             # The schema — rules for how the AI maintains everything.\n","text",[44,45,41],"code",{"__ignoreMap":46},"",[11,48,49,53],{},[50,51,52],"strong",{},"Raw"," is your junk drawer. You dump files in however you want — don't organize them, don't rename them, don't clean them up. That's the AI's job.",[11,55,56,59,60,63],{},[50,57,58],{},"Wiki"," is the organized output. Structured markdown pages with YAML frontmatter, ",[44,61,62],{},"[[wiki links]]",", and a maintained index. You never edit these by hand.",[11,65,66,69],{},[50,67,68],{},"CLAUDE.md"," is the instruction manual. It tells the AI what the wiki is about, how pages should be structured, and what operations are available. This single file is what makes the whole system work.",[29,71,73],{"id":72},"step-1-scaffold-the-directory-structure","Step 1: Scaffold the Directory Structure",[11,75,76],{},"I organized the wiki by domain because I wanted personal knowledge, research, and project knowledge to stay separate:",[37,78,81],{"className":79,"code":80,"language":42},[40],"personal\u002F             # Journal, goals, health, self-improvement\n  entities\u002F           # People, orgs, tools\n  concepts\u002F           # Ideas, frameworks, mental models\n  sources\u002F            # One summary page per ingested source\nresearch\u002F             # Deep dives on topics\n  entities\u002F\n  concepts\u002F\n  sources\u002F\nprojects\u002F             # Project-specific knowledge\n  entities\u002F\n  concepts\u002F\n  sources\u002F\noutputs\u002F              # Generated reports, analyses, Q&A\nindex.md              # Auto-maintained catalog of all pages\nlog.md                # Chronological activity log\n",[44,82,80],{"__ignoreMap":46},[11,84,85,86,89,90,93,94,97],{},"Each domain has three subdirectories: ",[50,87,88],{},"entities"," (people, tools, frameworks), ",[50,91,92],{},"concepts"," (ideas, patterns, methodologies), and ",[50,95,96],{},"sources"," (one summary per ingested source).",[11,99,100,101,104],{},"You could keep it flatter — Karpathy's approach is just a single ",[44,102,103],{},"wiki\u002F"," directory. But I found the domain split helps when you're querying across different areas of your life.",[29,106,108],{"id":107},"step-2-write-the-schema-claudemd","Step 2: Write the Schema (CLAUDE.md)",[11,110,111],{},"This is the most important file. Here's the core of mine:",[37,113,117],{"className":114,"code":115,"filename":68,"language":116,"meta":46,"style":46},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Wiki Schema\n\nThis is an LLM-maintained personal knowledge wiki.\nThe LLM writes and maintains all wiki pages.\nThe human curates sources, asks questions, and directs exploration.\n\n## Page Format\n\nEvery wiki page uses this structure:\n\n---\ntitle: Page Title\ntype: entity | concept | source | analysis\ndomain: personal | research | projects\ncreated: YYYY-MM-DD\nupdated: YYYY-MM-DD\nsources: [list of source files that informed this page]\ntags: [relevant tags]\n---\n\nContent here. Use [[wiki links]] to connect to other pages.\n\n## Operations\n\n### Ingest\nWhen the human adds a new source to raw\u002F:\n1. Read the source document thoroughly\n2. Create a summary page in the appropriate sources\u002F directory\n3. Update or create relevant entity and concept pages\n4. Add [[wiki links]] between new and existing pages\n5. Update index.md with new pages\n6. Append an entry to log.md\n\n### Query\nWhen the human asks a question:\n1. Read index.md to find relevant pages\n2. Read those pages for context\n3. Synthesize an answer with citations\n4. File the answer back into outputs\u002F and update wiki pages\n\n### Lint\nPeriodically health-check the wiki for contradictions,\norphan pages, missing cross-references, and knowledge gaps.\n","markdown",[44,118,119,127,134,140,146,152,157,163,168,174,179,185,191,197,203,209,215,221,227,232,237,243,248,254,259,265,271,277,283,289,295,301,307,312,318,324,330,336,342,348,353,359,365],{"__ignoreMap":46},[120,121,124],"span",{"class":122,"line":123},"line",1,[120,125,126],{},"# Wiki Schema\n",[120,128,130],{"class":122,"line":129},2,[120,131,133],{"emptyLinePlaceholder":132},true,"\n",[120,135,137],{"class":122,"line":136},3,[120,138,139],{},"This is an LLM-maintained personal knowledge wiki.\n",[120,141,143],{"class":122,"line":142},4,[120,144,145],{},"The LLM writes and maintains all wiki pages.\n",[120,147,149],{"class":122,"line":148},5,[120,150,151],{},"The human curates sources, asks questions, and directs exploration.\n",[120,153,155],{"class":122,"line":154},6,[120,156,133],{"emptyLinePlaceholder":132},[120,158,160],{"class":122,"line":159},7,[120,161,162],{},"## Page Format\n",[120,164,166],{"class":122,"line":165},8,[120,167,133],{"emptyLinePlaceholder":132},[120,169,171],{"class":122,"line":170},9,[120,172,173],{},"Every wiki page uses this structure:\n",[120,175,177],{"class":122,"line":176},10,[120,178,133],{"emptyLinePlaceholder":132},[120,180,182],{"class":122,"line":181},11,[120,183,184],{},"---\n",[120,186,188],{"class":122,"line":187},12,[120,189,190],{},"title: Page Title\n",[120,192,194],{"class":122,"line":193},13,[120,195,196],{},"type: entity | concept | source | analysis\n",[120,198,200],{"class":122,"line":199},14,[120,201,202],{},"domain: personal | research | projects\n",[120,204,206],{"class":122,"line":205},15,[120,207,208],{},"created: YYYY-MM-DD\n",[120,210,212],{"class":122,"line":211},16,[120,213,214],{},"updated: YYYY-MM-DD\n",[120,216,218],{"class":122,"line":217},17,[120,219,220],{},"sources: [list of source files that informed this page]\n",[120,222,224],{"class":122,"line":223},18,[120,225,226],{},"tags: [relevant tags]\n",[120,228,230],{"class":122,"line":229},19,[120,231,184],{},[120,233,235],{"class":122,"line":234},20,[120,236,133],{"emptyLinePlaceholder":132},[120,238,240],{"class":122,"line":239},21,[120,241,242],{},"Content here. Use [[wiki links]] to connect to other pages.\n",[120,244,246],{"class":122,"line":245},22,[120,247,133],{"emptyLinePlaceholder":132},[120,249,251],{"class":122,"line":250},23,[120,252,253],{},"## Operations\n",[120,255,257],{"class":122,"line":256},24,[120,258,133],{"emptyLinePlaceholder":132},[120,260,262],{"class":122,"line":261},25,[120,263,264],{},"### Ingest\n",[120,266,268],{"class":122,"line":267},26,[120,269,270],{},"When the human adds a new source to raw\u002F:\n",[120,272,274],{"class":122,"line":273},27,[120,275,276],{},"1. Read the source document thoroughly\n",[120,278,280],{"class":122,"line":279},28,[120,281,282],{},"2. Create a summary page in the appropriate sources\u002F directory\n",[120,284,286],{"class":122,"line":285},29,[120,287,288],{},"3. Update or create relevant entity and concept pages\n",[120,290,292],{"class":122,"line":291},30,[120,293,294],{},"4. Add [[wiki links]] between new and existing pages\n",[120,296,298],{"class":122,"line":297},31,[120,299,300],{},"5. Update index.md with new pages\n",[120,302,304],{"class":122,"line":303},32,[120,305,306],{},"6. Append an entry to log.md\n",[120,308,310],{"class":122,"line":309},33,[120,311,133],{"emptyLinePlaceholder":132},[120,313,315],{"class":122,"line":314},34,[120,316,317],{},"### Query\n",[120,319,321],{"class":122,"line":320},35,[120,322,323],{},"When the human asks a question:\n",[120,325,327],{"class":122,"line":326},36,[120,328,329],{},"1. Read index.md to find relevant pages\n",[120,331,333],{"class":122,"line":332},37,[120,334,335],{},"2. Read those pages for context\n",[120,337,339],{"class":122,"line":338},38,[120,340,341],{},"3. Synthesize an answer with citations\n",[120,343,345],{"class":122,"line":344},39,[120,346,347],{},"4. File the answer back into outputs\u002F and update wiki pages\n",[120,349,351],{"class":122,"line":350},40,[120,352,133],{"emptyLinePlaceholder":132},[120,354,356],{"class":122,"line":355},41,[120,357,358],{},"### Lint\n",[120,360,362],{"class":122,"line":361},42,[120,363,364],{},"Periodically health-check the wiki for contradictions,\n",[120,366,368],{"class":122,"line":367},43,[120,369,370],{},"orphan pages, missing cross-references, and knowledge gaps.\n",[11,372,373,374,377],{},"The key insight: ",[50,375,376],{},"a single source may touch 10-15 wiki pages."," When I ingested a YouTube interview about tech leadership, it created an entity page for the guest, a concept page for career path models, a source summary, and updated my personal profile page — all automatically. The schema tells the AI to think in terms of connections, not just summaries.",[29,379,381],{"id":380},"step-3-dump-everything-into-raw","Step 3: Dump Everything Into Raw",[11,383,384],{},"This is where most people overthink it. Don't. Just dump:",[37,386,389],{"className":387,"code":388,"language":42},[40],"raw\u002F\n  blog-site\u002F          # My blog content export\n  Notion\u002F             # Full Notion workspace export\n  youtube\u002F            # 61 auto-generated transcripts (yt-dlp)\n  feedly\u002F             # 13 years of Feedly reading history\n  google-takeout\u002F     # Chrome bookmarks, Keep notes, Maps, Play Books\n  Clippings\u002F          # Obsidian Web Clipper articles\n",[44,390,388],{"__ignoreMap":46},[392,393,395],"h3",{"id":394},"getting-youtube-transcripts","Getting YouTube Transcripts",[37,397,401],{"className":398,"code":399,"language":400,"meta":46,"style":46},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","brew install yt-dlp\nyt-dlp --write-auto-sub --sub-lang en --skip-download \\\n  -o \"raw\u002Fyoutube\u002F%(title)s.%(ext)s\" \\\n  \"https:\u002F\u002Fwww.youtube.com\u002F@yourchannel\"\n","bash",[44,402,403,416,437,454],{"__ignoreMap":46},[120,404,405,409,413],{"class":122,"line":123},[120,406,408],{"class":407},"sBMFI","brew",[120,410,412],{"class":411},"sfazB"," install",[120,414,415],{"class":411}," yt-dlp\n",[120,417,418,421,424,427,430,433],{"class":122,"line":129},[120,419,420],{"class":407},"yt-dlp",[120,422,423],{"class":411}," --write-auto-sub",[120,425,426],{"class":411}," --sub-lang",[120,428,429],{"class":411}," en",[120,431,432],{"class":411}," --skip-download",[120,434,436],{"class":435},"sTEyZ"," \\\n",[120,438,439,442,446,449,452],{"class":122,"line":136},[120,440,441],{"class":411},"  -o",[120,443,445],{"class":444},"sMK4o"," \"",[120,447,448],{"class":411},"raw\u002Fyoutube\u002F%(title)s.%(ext)s",[120,450,451],{"class":444},"\"",[120,453,436],{"class":435},[120,455,456,459,462],{"class":122,"line":142},[120,457,458],{"class":444},"  \"",[120,460,461],{"class":411},"https:\u002F\u002Fwww.youtube.com\u002F@yourchannel",[120,463,464],{"class":444},"\"\n",[11,466,467],{},"This grabs all auto-generated transcripts from your channel in a few minutes. Some videos may not have subtitles available — short clips or non-English content.",[392,469,471],{"id":470},"getting-google-takeout-data","Getting Google Takeout Data",[11,473,474,475,482],{},"Go to ",[476,477,481],"a",{"href":478,"rel":479},"https:\u002F\u002Ftakeout.google.com",[480],"nofollow","takeout.google.com"," and select only:",[484,485,486,493,499,505,511,517],"ul",{},[487,488,489,492],"li",{},[50,490,491],{},"Chrome"," — bookmarks and browsing history",[487,494,495,498],{},[50,496,497],{},"Keep"," — all your notes",[487,500,501,504],{},[50,502,503],{},"Maps (your places)"," — saved places and reviews",[487,506,507,510],{},[50,508,509],{},"YouTube"," — watch history, playlists, subscriptions",[487,512,513,516],{},[50,514,515],{},"Google Play Books"," — your ebook library",[487,518,519,522],{},[50,520,521],{},"Saved"," — links saved from Google Search",[11,524,525],{},"Skip everything else. Gmail, Drive, and Photos are too massive and noisy. Pro tip: delete the Maps photos\u002Fvideos folder from your Takeout — it's often several GBs of noise. The saved places and reviews JSON files are tiny and much more useful.",[392,527,529],{"id":528},"feedly-export","Feedly Export",[11,531,532],{},"If you use Feedly: Settings → OPML export for your feed list, plus the archive export for all your read\u002Fsaved articles.",[392,534,536],{"id":535},"notion-export","Notion Export",[11,538,539],{},"Settings → Export all workspace content as Markdown.",[29,541,543],{"id":542},"step-4-tell-claude-code-to-ingest","Step 4: Tell Claude Code to Ingest",[11,545,546],{},"Open Claude Code in the wiki directory and say:",[548,549,550],"blockquote",{},[11,551,552],{},"\"Read everything in raw\u002F. Ingest it all following the rules in CLAUDE.md.\"",[11,554,555],{},"Then let it work. For large collections, run ingestion in batches — Notion first, then YouTube, then Feedly, then Google Takeout. Each batch takes a few minutes.",[11,557,558],{},"What Claude Code actually does during ingestion:",[560,561,562,568,578,584,590,599,608],"ol",{},[487,563,564,567],{},[50,565,566],{},"Reads the raw source"," — parses HTML, JSON, VTT subtitles, markdown, whatever",[487,569,570,573,574,577],{},[50,571,572],{},"Creates a source summary"," — one page in ",[44,575,576],{},"sources\u002F"," that captures the key information",[487,579,580,583],{},[50,581,582],{},"Creates or updates entity pages"," — if the source mentions Angular, it updates the Angular page. If it mentions a person, it creates or updates their entity page.",[487,585,586,589],{},[50,587,588],{},"Creates or updates concept pages"," — patterns, methodologies, and ideas get their own pages",[487,591,592,595,596,598],{},[50,593,594],{},"Adds cross-references"," — ",[44,597,62],{}," between all related pages",[487,600,601,595,604,607],{},[50,602,603],{},"Updates the index",[44,605,606],{},"index.md"," stays current",[487,609,610,595,613,616],{},[50,611,612],{},"Logs the activity",[44,614,615],{},"log.md"," tracks what was ingested and when",[11,618,619],{},"A single YouTube interview about tech leadership generated: 1 source summary, 1 entity page for the guest, 1 concept page for career path models, and updates to 3 existing pages. That's 6 page touches from one 45-minute video transcript.",[29,621,623],{"id":622},"step-5-ask-questions","Step 5: Ask Questions",[11,625,626],{},"Once the wiki has enough pages (mine hit 40+ after the first round), start querying:",[548,628,629],{},[11,630,631],{},"\"What patterns do I see across my failed projects?\"",[548,633,634],{},[11,635,636],{},"\"Based on my reading history and bookmarks, what topics have I been circling around but never committed to?\"",[548,638,639],{},[11,640,641],{},"\"What are my biggest skill gaps based on everything in the wiki?\"",[11,643,644,645,648],{},"The AI reads across your entire wiki and synthesizes answers grounded in ",[21,646,647],{},"your own data."," I asked \"What are my weak points?\" and it surfaced patterns I already knew but had never seen in one place — projects started but never finished, books saved but never read, outlines created but left empty. When the data is connected, you can't hide from it.",[11,650,651,652,655,656,659],{},"The critical part: ",[50,653,654],{},"answers get filed back."," Valuable outputs go into ",[44,657,658],{},"outputs\u002F"," and enrich existing wiki pages. Every question makes the next answer better. This is the compounding loop.",[29,661,663],{"id":662},"step-6-keep-it-growing","Step 6: Keep It Growing",[11,665,666],{},"The wiki isn't a one-time project. It's a living system:",[484,668,669,679,685],{},[487,670,671,674,675,678],{},[50,672,673],{},"Clip articles"," with Obsidian Web Clipper → they land in ",[44,676,677],{},"raw\u002FClippings\u002F"," → tell Claude Code to ingest",[487,680,681,684],{},[50,682,683],{},"Give it a URL"," → \"scrape this\" → it fetches, saves to raw, and ingests",[487,686,687,690],{},[50,688,689],{},"Run lint monthly"," → \"lint the wiki\" → it flags contradictions, orphan pages, missing concepts, and suggests new pages to fill gaps",[11,692,693,694,696],{},"I also set up Obsidian to point at the wiki directory, so I can browse the ",[44,695,62],{}," as a graph. But you don't need Obsidian — any text editor works. The files are just markdown.",[29,698,700],{"id":699},"what-i-learned","What I Learned",[11,702,703,706],{},[50,704,705],{},"Don't organize raw\u002F."," I wasted time initially trying to sort files into subfolders. Stop. The AI handles all organization in the wiki layer. Raw is meant to be messy.",[11,708,709,712],{},[50,710,711],{},"Don't edit wiki pages by hand."," Let the AI own the wiki layer entirely — tell it what to change and it'll keep links and metadata consistent.",[11,714,715,718,719,721],{},[50,716,717],{},"The schema is everything."," Without ",[44,720,68],{},", you're just asking an AI to summarize files. With it, you're giving it a consistent framework for building knowledge. The difference is enormous.",[11,723,724,727],{},[50,725,726],{},"Ingestion is not summarization."," A good ingest operation doesn't just summarize a source — it connects it to everything else in the wiki. A single video transcript can touch your profile page, your career goals, your project ideas, and your skills page. Those connections are the value.",[11,729,730,733],{},[50,731,732],{},"Questions are more valuable than sources."," The wiki got 10x more useful once I started querying it instead of just ingesting. The compounding loop — question → answer → filed back → better future answers — is what makes this a second brain instead of a fancy bookmark folder.",[29,735,737],{"id":736},"the-result","The Result",[11,739,740],{},"After a weekend of setup, I had:",[484,742,743,749,755,761],{},[487,744,745,748],{},[50,746,747],{},"50+ wiki pages"," auto-generated and cross-referenced",[487,750,751,754],{},[50,752,753],{},"Thousands of raw source files"," ingested from 7 different sources",[487,756,757,760],{},[50,758,759],{},"A compounding knowledge system"," that gets smarter with every question",[487,762,763,766],{},[50,764,765],{},"0 apps installed"," — just folders, markdown, and Claude Code",[11,768,769],{},"The whole thing is version-controlled with git. No database, no plugins, no subscriptions. Just text files that an AI knows how to maintain.",[11,771,772],{},"If you've been hoarding bookmarks, notes, and articles for years, this is how you finally make them useful. Pick a weekend, dump everything in, and let the AI connect the dots.",[11,774,775],{},"Let me know if you run into any issues or have questions about the setup ✌️",[777,778,779],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":46,"searchDepth":129,"depth":129,"links":781},[782,783,784,785,791,792,793,794,795],{"id":31,"depth":129,"text":32},{"id":72,"depth":129,"text":73},{"id":107,"depth":129,"text":108},{"id":380,"depth":129,"text":381,"children":786},[787,788,789,790],{"id":394,"depth":136,"text":395},{"id":470,"depth":136,"text":471},{"id":528,"depth":136,"text":529},{"id":535,"depth":136,"text":536},{"id":542,"depth":129,"text":543},{"id":622,"depth":129,"text":623},{"id":662,"depth":129,"text":663},{"id":699,"depth":129,"text":700},{"id":736,"depth":129,"text":737},"2026-04-07","How I turned 14,000+ scattered files — YouTube transcripts, 13 years of RSS feeds, Google Takeout data, Notion exports — into a 50-page cross-referenced knowledge wiki using Claude Code and flat markdown files.","md","\u002Fimg\u002Fpersonal-knowledge-wiki.jpg",{},"\u002Fblog\u002Fhow-i-built-a-personal-knowledge-wiki-with-claude-code",{"title":5,"description":797},"blog\u002Fhow-i-built-a-personal-knowledge-wiki-with-claude-code",[805],"Web Development","90S9pcP-rHmDXcb6_chHKvaSJ4MyZcQd4OdDZK0ucqY",[808,813],{"title":809,"path":810,"stem":811,"description":812,"children":-1},"Getting Started With Angular 10 and TailwindCSS using CDN (Part 1)","\u002Fblog\u002Fgetting-started-with-angular-10-and-tailwindcss-using-cdn-part-1","blog\u002Fgetting-started-with-angular-10-and-tailwindcss-using-cdn-part-1","In this article, we will take a look at how we can use TailwindCSS with Angular 10 using the TailwindCSS CDN",{"title":814,"path":815,"stem":816,"description":817,"children":-1},"HTML5 TextArea Validation with jQuery to disallow certain words","\u002Fblog\u002Fhtml5-textarea-validation-jquery-disallow-certain-words-330","blog\u002Fhtml5-textarea-validation-jquery-disallow-certain-words-330","In this article we will take a look at how we can do HTML5 TextArea Validation with jQuery to disallow certain words",1775568345648]