[{"data":1,"prerenderedAt":892},["ShallowReactive",2],{"cmd-projects-en":3,"cmd-posts-en":230,"blog-post-\u002Fblog\u002Fwebsite-to-telegram-automation":793,"blog-surround-\u002Fblog\u002Fwebsite-to-telegram-automation":890},[4,82,166],{"id":5,"title":6,"body":7,"description":68,"extension":69,"featured":70,"github":71,"image":72,"live":73,"meta":74,"navigation":70,"order":63,"path":75,"seo":76,"stack":77,"stem":80,"__hash__":81},"projects_en\u002Fprojects\u002Fcli-tool.md","devkit CLI",{"type":8,"value":9,"toc":60},"minimark",[10,15,22,27],[11,12,14],"h2",{"id":13},"project-details","Project Details",[16,17,18,21],"p",{},[19,20,6],"code",{}," is a fast, cross-platform command-line developer suite engineered to eliminate repetitive boilerplate and streamline engineering workflows across local development and CI\u002FCD pipelines.",[23,24,26],"h3",{"id":25},"key-features","Key Features",[28,29,30,38,48,54],"ul",{},[31,32,33,37],"li",{},[34,35,36],"strong",{},"Go & Cobra Powered:"," Compiles to a single zero-dependency static binary with sub-millisecond execution times across Linux, macOS, and Windows.",[31,39,40,43,44,47],{},[34,41,42],{},"Interactive Prompts:"," Built-in terminal UI prompts using ",[19,45,46],{},"promptui"," for interactive menu selection and project scaffolding.",[31,49,50,53],{},[34,51,52],{},"Service Scaffolding:"," Generates production-ready backend microservice or frontend application templates in seconds.",[31,55,56,59],{},[34,57,58],{},"Automated Git Workflows:"," Configures pre-commit linting, formatting hooks, and standardized commit message checks.",{"title":61,"searchDepth":62,"depth":63,"links":64},"",2,3,[65],{"id":13,"depth":62,"text":14,"children":66},[67],{"id":25,"depth":63,"text":26},"A command-line productivity tool to scaffold microservices, manage git hooks and automate daily developer chores.","md",true,"https:\u002F\u002Fgithub.com\u002Fusername\u002Fdevkit",null,"https:\u002F\u002Fexample.com",{},"\u002Fprojects\u002Fcli-tool",{"title":6,"description":68},[78,79],"Go","Cobra","projects\u002Fcli-tool","MYc-hQxq4hEPJlcPfmY5k7oFLcK8C_P9cbjbrvZWYuc",{"id":83,"title":84,"body":85,"description":153,"extension":69,"featured":70,"github":154,"image":72,"live":72,"meta":155,"navigation":70,"order":156,"path":157,"seo":158,"stack":159,"stem":164,"__hash__":165},"projects_en\u002Fprojects\u002Fportfolio-site.md","This website",{"type":8,"value":86,"toc":147},[87,89,92,94,140,144],[11,88,14],{"id":13},[16,90,91],{},"This portfolio web application is engineered with cutting-edge web technologies, designed to provide a blazing-fast, premium experience for developers to showcase their work, write engineering notes, and share video content.",[23,93,26],{"id":25},[28,95,96,106,120,126],{},[31,97,98,101,102,105],{},[34,99,100],{},"Bilingual Support (UZ \u002F EN):"," Powered by ",[19,103,104],{},"@nuxtjs\u002Fi18n"," with seamless localized content collections.",[31,107,108,111,112,115,116,119],{},[34,109,110],{},"Nuxt Content v3:"," All data is authored in clean Markdown (",[19,113,114],{},".md",") and queried dynamically via SQL-like ",[19,117,118],{},"queryCollection"," pipelines.",[31,121,122,125],{},[34,123,124],{},"Glassmorphism & Modern UI:"," Crafted with Tailwind CSS v4 featuring radial spotlight hover effects and smooth dark\u002Flight mode switching.",[31,127,128,131,132,135,136,139],{},[34,129,130],{},"Click-to-Load Video Performance:"," Embedded YouTube videos load lightweight thumbnails first (",[19,133,134],{},"~15KB",") instead of heavy iframes (",[19,137,138],{},"~1MB","), and only play one video at a time across the app.",[23,141,143],{"id":142},"architecture","Architecture",[16,145,146],{},"Written with Vue 3 Composition API and strict TypeScript throughout. Fully optimized for SEO with dynamic meta tags and structured data.",{"title":61,"searchDepth":62,"depth":63,"links":148},[149],{"id":13,"depth":62,"text":14,"children":150},[151,152],{"id":25,"depth":63,"text":26},{"id":142,"depth":63,"text":143},"Bilingual portfolio, blog and vlog built with Nuxt 4, Nuxt Content and Tailwind CSS v4. Fully static, no server required.","https:\u002F\u002Fgithub.com\u002Fusername\u002Fportfolio",{},1,"\u002Fprojects\u002Fportfolio-site",{"title":84,"description":153},[160,161,162,163],"Nuxt","Vue","Tailwind CSS","TypeScript","projects\u002Fportfolio-site","K6S03UFSfzTcfCAtI8HWQXEm71MBC-FCbiSNNeLVPNc",{"id":167,"title":168,"body":169,"description":219,"extension":69,"featured":70,"github":220,"image":72,"live":72,"meta":221,"navigation":70,"order":62,"path":222,"seo":223,"stack":224,"stem":228,"__hash__":229},"projects_en\u002Fprojects\u002Ftask-api.md","Task API",{"type":8,"value":170,"toc":214},[171,173,176,178],[11,172,14],{"id":13},[16,174,175],{},"Task API is a enterprise-grade backend service designed for high-performance task and project workflows. Built around clean architecture principles with robust validation and security layers.",[23,177,26],{"id":25},[28,179,180,186,192,198,208],{},[31,181,182,185],{},[34,183,184],{},"Secure Authentication:"," Complete JWT stateless authentication with refresh token rotation and bcrypt password hashing.",[31,187,188,191],{},[34,189,190],{},"Role-Based Access Control (RBAC):"," Granular permission management across Admin, Manager, and User roles.",[31,193,194,197],{},[34,195,196],{},"PostgreSQL Database:"," High-speed relational queries handled through Prisma ORM with automated migrations.",[31,199,200,203,204,207],{},[34,201,202],{},"Docker Containerization:"," Ready-to-run ",[19,205,206],{},"docker-compose"," setup with database seeding and multi-stage production builds.",[31,209,210,213],{},[34,211,212],{},"Interactive OpenAPI 3.0 Docs:"," Fully documented Swagger UI endpoints with schema definitions and test consoles.",{"title":61,"searchDepth":62,"depth":63,"links":215},[216],{"id":13,"depth":62,"text":14,"children":217},[218],{"id":25,"depth":63,"text":26},"JWT authentication, rate limiting and OpenAPI documentation. Task management REST API starter project.","https:\u002F\u002Fgithub.com\u002Fusername\u002Ftask-api",{},"\u002Fprojects\u002Ftask-api",{"title":168,"description":219},[225,226,227],"Node.js","PostgreSQL","Docker","projects\u002Ftask-api","Iz8qAUliqiWYerQZpqhhaVprlxwCJV2vNy1ITWmvURQ",[231,398,633],{"id":232,"title":233,"body":234,"date":388,"description":389,"extension":69,"image":72,"meta":390,"navigation":70,"path":391,"seo":392,"stem":393,"tags":394,"__hash__":397},"blog_en\u002Fblog\u002Fhello-world.md","Hello, world — why I'm starting this blog",{"type":8,"value":235,"toc":383},[236,244,248,251,272,276,279,369,373,376,379],[16,237,238,239,243],{},"Every engineer eventually hears the same advice: ",[240,241,242],"em",{},"write in public",". This is me finally taking it.",[11,245,247],{"id":246},"what-to-expect-here","What to expect here",[16,249,250],{},"I plan to write about three things:",[252,253,254,260,266],"ol",{},[31,255,256,259],{},[34,257,258],{},"Engineering notes"," — problems I hit at work and how I solved them",[31,261,262,265],{},[34,263,264],{},"Tooling"," — editors, CLIs, and workflows that actually save time",[31,267,268,271],{},[34,269,270],{},"Career"," — what I learn about growing as a software engineer",[11,273,275],{"id":274},"why-write-at-all","Why write at all?",[16,277,278],{},"Writing forces clarity. If I can't explain a solution in a few paragraphs, I probably don't understand it yet. A blog is also a public notebook — six months from now, the person most likely to need these notes is me.",[280,281,285],"pre",{"className":282,"code":283,"language":284,"meta":61,"style":61},"language-ts shiki shiki-themes github-light github-dark","\u002F\u002F The whole plan, as code:\nconst blog = {\n  cadence: 'when I have something worth saying',\n  language: ['en', 'uz'],\n  topics: ['engineering', 'tooling', 'career'],\n}\n","ts",[19,286,287,295,312,324,342,363],{"__ignoreMap":61},[288,289,291],"span",{"class":290,"line":156},"line",[288,292,294],{"class":293},"sJ8bj","\u002F\u002F The whole plan, as code:\n",[288,296,297,301,305,308],{"class":290,"line":62},[288,298,300],{"class":299},"szBVR","const",[288,302,304],{"class":303},"sj4cs"," blog",[288,306,307],{"class":299}," =",[288,309,311],{"class":310},"sVt8B"," {\n",[288,313,314,317,321],{"class":290,"line":63},[288,315,316],{"class":310},"  cadence: ",[288,318,320],{"class":319},"sZZnC","'when I have something worth saying'",[288,322,323],{"class":310},",\n",[288,325,327,330,333,336,339],{"class":290,"line":326},4,[288,328,329],{"class":310},"  language: [",[288,331,332],{"class":319},"'en'",[288,334,335],{"class":310},", ",[288,337,338],{"class":319},"'uz'",[288,340,341],{"class":310},"],\n",[288,343,345,348,351,353,356,358,361],{"class":290,"line":344},5,[288,346,347],{"class":310},"  topics: [",[288,349,350],{"class":319},"'engineering'",[288,352,335],{"class":310},[288,354,355],{"class":319},"'tooling'",[288,357,335],{"class":310},[288,359,360],{"class":319},"'career'",[288,362,341],{"class":310},[288,364,366],{"class":290,"line":365},6,[288,367,368],{"class":310},"}\n",[11,370,372],{"id":371},"a-note-on-the-two-languages","A note on the two languages",[16,374,375],{},"I write in English and Uzbek. Not every post will be translated — each language gets the posts that make sense for its audience.",[16,377,378],{},"See you in the next post.",[380,381,382],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}",{"title":61,"searchDepth":62,"depth":63,"links":384},[385,386,387],{"id":246,"depth":62,"text":247},{"id":274,"depth":62,"text":275},{"id":371,"depth":62,"text":372},"2026-07-10","The obligatory first post: what this blog is for, what I'll write about, and why writing in public matters for engineers.",{},"\u002Fblog\u002Fhello-world",{"title":233,"description":389},"blog\u002Fhello-world",[395,396],"meta","career","8gQyRdZxZAg6lljmYYzjiFlDvuVFTHEQ0j4LdjNcYyU",{"id":399,"title":400,"body":401,"date":622,"description":623,"extension":69,"image":72,"meta":624,"navigation":70,"path":625,"seo":626,"stem":627,"tags":628,"__hash__":632},"blog_en\u002Fblog\u002Fnuxt-content-static-blog.md","Building a static blog with Nuxt Content v3",{"type":8,"value":402,"toc":616},[403,410,414,421,501,508,512,515,588,592,595,603,606,610,613],[16,404,405,406,409],{},"This site is a fully static Nuxt app. Every post is a Markdown file in the repo, and ",[19,407,408],{},"nuxt generate"," turns the whole thing into plain HTML. Here's the interesting part of the setup.",[11,411,413],{"id":412},"collections-are-typed","Collections are typed",[16,415,416,417,420],{},"Nuxt Content v3 replaced the old file-based querying with ",[34,418,419],{},"collections"," — you declare a schema, and frontmatter gets validated at build time:",[280,422,424],{"className":282,"code":423,"language":284,"meta":61,"style":61},"const blogSchema = z.object({\n  title: z.string(),\n  description: z.string(),\n  date: z.string(),\n  tags: z.array(z.string()).default([]),\n})\n",[19,425,426,445,456,465,474,496],{"__ignoreMap":61},[288,427,428,430,433,435,438,442],{"class":290,"line":156},[288,429,300],{"class":299},[288,431,432],{"class":303}," blogSchema",[288,434,307],{"class":299},[288,436,437],{"class":310}," z.",[288,439,441],{"class":440},"sScJk","object",[288,443,444],{"class":310},"({\n",[288,446,447,450,453],{"class":290,"line":62},[288,448,449],{"class":310},"  title: z.",[288,451,452],{"class":440},"string",[288,454,455],{"class":310},"(),\n",[288,457,458,461,463],{"class":290,"line":63},[288,459,460],{"class":310},"  description: z.",[288,462,452],{"class":440},[288,464,455],{"class":310},[288,466,467,470,472],{"class":290,"line":326},[288,468,469],{"class":310},"  date: z.",[288,471,452],{"class":440},[288,473,455],{"class":310},[288,475,476,479,482,485,487,490,493],{"class":290,"line":344},[288,477,478],{"class":310},"  tags: z.",[288,480,481],{"class":440},"array",[288,483,484],{"class":310},"(z.",[288,486,452],{"class":440},[288,488,489],{"class":310},"()).",[288,491,492],{"class":440},"default",[288,494,495],{"class":310},"([]),\n",[288,497,498],{"class":290,"line":365},[288,499,500],{"class":310},"})\n",[16,502,503,504,507],{},"Typos in frontmatter now fail the build instead of silently rendering ",[19,505,506],{},"undefined",". This is the single biggest quality-of-life win over v2.",[11,509,511],{"id":510},"queries-look-like-sql-because-they-are","Queries look like SQL because they are",[16,513,514],{},"Under the hood, content lives in SQLite. The query API compiles to SQL:",[280,516,518],{"className":282,"code":517,"language":284,"meta":61,"style":61},"const posts = await queryCollection('blog_en')\n  .order('date', 'DESC')\n  .limit(3)\n  .all()\n",[19,519,520,544,564,578],{"__ignoreMap":61},[288,521,522,524,527,529,532,535,538,541],{"class":290,"line":156},[288,523,300],{"class":299},[288,525,526],{"class":303}," posts",[288,528,307],{"class":299},[288,530,531],{"class":299}," await",[288,533,534],{"class":440}," queryCollection",[288,536,537],{"class":310},"(",[288,539,540],{"class":319},"'blog_en'",[288,542,543],{"class":310},")\n",[288,545,546,549,552,554,557,559,562],{"class":290,"line":62},[288,547,548],{"class":310},"  .",[288,550,551],{"class":440},"order",[288,553,537],{"class":310},[288,555,556],{"class":319},"'date'",[288,558,335],{"class":310},[288,560,561],{"class":319},"'DESC'",[288,563,543],{"class":310},[288,565,566,568,571,573,576],{"class":290,"line":63},[288,567,548],{"class":310},[288,569,570],{"class":440},"limit",[288,572,537],{"class":310},[288,574,575],{"class":303},"3",[288,577,543],{"class":310},[288,579,580,582,585],{"class":290,"line":326},[288,581,548],{"class":310},[288,583,584],{"class":440},"all",[288,586,587],{"class":310},"()\n",[11,589,591],{"id":590},"two-languages-two-collections","Two languages, two collections",[16,593,594],{},"For a bilingual site, one collection per locale keeps things simple:",[280,596,601],{"className":597,"code":599,"language":600},[598],"language-text","content\u002F\n  en\u002Fblog\u002F    → collection blog_en, served at \u002Fblog\n  uz\u002Fblog\u002F    → collection blog_uz, served at \u002Fuz\u002Fblog\n","text",[19,602,599],{"__ignoreMap":61},[16,604,605],{},"A tiny composable picks the right collection from the active locale, and the rest of the code never thinks about i18n.",[11,607,609],{"id":608},"the-result","The result",[16,611,612],{},"No server, no database in production, no CMS subscription. Just Markdown files, a git history, and static HTML that any CDN can serve.",[380,614,615],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":61,"searchDepth":62,"depth":63,"links":617},[618,619,620,621],{"id":412,"depth":62,"text":413},{"id":510,"depth":62,"text":511},{"id":590,"depth":62,"text":591},{"id":608,"depth":62,"text":609},"2026-07-14","How this site works under the hood: Markdown collections, SQLite-backed queries, and full static generation with Nuxt.",{},"\u002Fblog\u002Fnuxt-content-static-blog",{"title":400,"description":623},"blog\u002Fnuxt-content-static-blog",[629,630,631],"nuxt","vue","tooling","Vjjtutnkn2zGY1coUA-L_dr9pk_zjeJYAjL0ciEyAk8",{"id":634,"title":635,"body":636,"date":782,"description":783,"extension":69,"image":72,"meta":784,"navigation":70,"path":785,"seo":786,"stem":787,"tags":788,"__hash__":792},"blog_en\u002Fblog\u002Fwebsite-to-telegram-automation.md","100% Serverless Website to Telegram Channel Automation",{"type":8,"value":637,"toc":777},[638,645,659,663,674,706,710,767,771,774],[16,639,640,641,644],{},"When maintaining a personal developer blog, one of the most tedious manual tasks is sharing newly published posts across social channels like ",[34,642,643],{},"Telegram",".",[16,646,647,648,651,652,654,655,658],{},"We have fully automated this workflow! Now, whenever a new ",[34,649,650],{},"Markdown"," (",[19,653,114],{},") file is committed to the repository via ",[19,656,657],{},"git push",", a real-time notification is instantly broadcasted directly to our Telegram channel—without paying for a 24\u002F7 VPS or third-party webhooks.",[11,660,662],{"id":661},"how-does-it-work-without-a-dedicated-server","How does it work without a dedicated server?",[16,664,665,666,669,670,673],{},"Most developers assume running a Telegram bot requires a continuously running Node.js or Python background service. However, since our codebase lives on ",[34,667,668],{},"GitHub",", we leverage ",[34,671,672],{},"GitHub Actions"," as an ephemeral serverless execution engine!",[280,675,679],{"className":676,"code":677,"language":678,"meta":61,"style":61},"language-mermaid shiki shiki-themes github-light github-dark","graph LR\n    A[New post.md committed] --> B[GitHub Repository]\n    B --> C[Cloudflare Pages Build]\n    B --> D[GitHub Actions Workflow]\n    D --> E[Telegram Channel Broadcast ✈️]\n","mermaid",[19,680,681,686,691,696,701],{"__ignoreMap":61},[288,682,683],{"class":290,"line":156},[288,684,685],{},"graph LR\n",[288,687,688],{"class":290,"line":62},[288,689,690],{},"    A[New post.md committed] --> B[GitHub Repository]\n",[288,692,693],{"class":290,"line":63},[288,694,695],{},"    B --> C[Cloudflare Pages Build]\n",[288,697,698],{"class":290,"line":326},[288,699,700],{},"    B --> D[GitHub Actions Workflow]\n",[288,702,703],{"class":290,"line":344},[288,704,705],{},"    D --> E[Telegram Channel Broadcast ✈️]\n",[11,707,709],{"id":708},"the-workflow-step-by-step","The Workflow Step-by-Step",[252,711,712,733,753],{},[31,713,714,717,718,721,722,725,726,729,730,732],{},[34,715,716],{},"Commit Analysis:"," When a push hits ",[19,719,720],{},"main",", our custom Node script (",[19,723,724],{},"notify-telegram.mjs",") parses ",[19,727,728],{},"git diff"," to identify freshly added ",[19,731,114],{}," files.",[31,734,735,738,739,335,742,335,745,748,749,752],{},[34,736,737],{},"Frontmatter Extraction:"," It reads the metadata (",[19,740,741],{},"title",[19,743,744],{},"description",[19,746,747],{},"tags",") and verifies that ",[19,750,751],{},"draft: true"," is not set.",[31,754,755,758,759,762,763,766],{},[34,756,757],{},"Telegram Bot API:"," The extracted details are formatted into clean HTML markup and dispatched via a secure ",[19,760,761],{},"fetch()"," request directly to Telegram's ",[19,764,765],{},"sendMessage"," endpoint.",[11,768,770],{"id":769},"conclusion","Conclusion",[16,772,773],{},"By combining static JAMstack rendering with event-driven GitHub Actions, we achieve an ultra-fast, zero-maintenance publishing pipeline. Write markdown, push to main, and let the automation handle the rest!",[380,775,776],{},"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);}",{"title":61,"searchDepth":62,"depth":63,"links":778},[779,780,781],{"id":661,"depth":62,"text":662},{"id":708,"depth":62,"text":709},{"id":769,"depth":62,"text":770},"2026-07-15","How any new blog post automatically triggers an instant broadcast to a Telegram channel using zero-cost GitHub Actions.",{},"\u002Fblog\u002Fwebsite-to-telegram-automation",{"title":635,"description":783},"blog\u002Fwebsite-to-telegram-automation",[789,790,791,629],"telegram","github-actions","automation","Qwxo7IjieECrbq5zrsg8hDZX9CsZsdGCr09J9x-FufI",{"id":634,"title":635,"body":794,"date":782,"description":783,"extension":69,"image":72,"meta":887,"navigation":70,"path":785,"seo":888,"stem":787,"tags":889,"__hash__":792},{"type":8,"value":795,"toc":882},[796,800,808,810,816,840,842,876,878,880],[16,797,640,798,644],{},[34,799,643],{},[16,801,647,802,651,804,654,806,658],{},[34,803,650],{},[19,805,114],{},[19,807,657],{},[11,809,662],{"id":661},[16,811,665,812,669,814,673],{},[34,813,668],{},[34,815,672],{},[280,817,818],{"className":676,"code":677,"language":678,"meta":61,"style":61},[19,819,820,824,828,832,836],{"__ignoreMap":61},[288,821,822],{"class":290,"line":156},[288,823,685],{},[288,825,826],{"class":290,"line":62},[288,827,690],{},[288,829,830],{"class":290,"line":63},[288,831,695],{},[288,833,834],{"class":290,"line":326},[288,835,700],{},[288,837,838],{"class":290,"line":344},[288,839,705],{},[11,841,709],{"id":708},[252,843,844,856,868],{},[31,845,846,717,848,721,850,725,852,729,854,732],{},[34,847,716],{},[19,849,720],{},[19,851,724],{},[19,853,728],{},[19,855,114],{},[31,857,858,738,860,335,862,335,864,748,866,752],{},[34,859,737],{},[19,861,741],{},[19,863,744],{},[19,865,747],{},[19,867,751],{},[31,869,870,758,872,762,874,766],{},[34,871,757],{},[19,873,761],{},[19,875,765],{},[11,877,770],{"id":769},[16,879,773],{},[380,881,776],{},{"title":61,"searchDepth":62,"depth":63,"links":883},[884,885,886],{"id":661,"depth":62,"text":662},{"id":708,"depth":62,"text":709},{"id":769,"depth":62,"text":770},{},{"title":635,"description":783},[789,790,791,629],[72,891],{"title":400,"path":625,"stem":627,"children":-1},1784301280330]