<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vien Dinh</title>
    <description>The latest articles on DEV Community by Vien Dinh (@maxvien).</description>
    <link>https://dev.to/maxvien</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F568913%2F4856b5b8-f85d-4f2a-b01f-df1f5827901d.jpeg</url>
      <title>DEV Community: Vien Dinh</title>
      <link>https://dev.to/maxvien</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxvien"/>
    <language>en</language>
    <item>
      <title>Vite Plus Full Stack cho phát triển Web &amp; Mobile với AI Agents</title>
      <dc:creator>Vien Dinh</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:14:13 +0000</pubDate>
      <link>https://dev.to/maxvien/vite-plus-full-stack-cho-phat-trien-web-mobile-voi-ai-agents-5ap8</link>
      <guid>https://dev.to/maxvien/vite-plus-full-stack-cho-phat-trien-web-mobile-voi-ai-agents-5ap8</guid>
      <description>&lt;p&gt;&lt;strong&gt;100 stars. Tôi build. MIT license. Miễn phí.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chuyện này chắc không còn xa lạ.&lt;/p&gt;

&lt;p&gt;Có một sản phẩm cần cả website lẫn app điện thoại. Thế là mở hai chục tab. Web framework. Mobile framework. UI kit. API layer. Validation. Auth. Database. Email. Cache. Files. Logs. Docker để chạy trên máy. Cách đưa nó lên server. Rồi thêm một AI agent có thể nhìn vào repo mà không tự nghĩ ra một kiến trúc khác.&lt;/p&gt;

&lt;p&gt;Vài tuần sau, đống công cụ gần như đã chịu nói chuyện được với nhau. Còn ý tưởng thì nguội ngắt.&lt;/p&gt;

&lt;p&gt;Mua sắm công nghệ bắt đầu giống làm kỹ thuật. Trong khi thứ quan trọng nhất, sản phẩm, vẫn chưa được bắt tay vào làm.&lt;/p&gt;

&lt;p&gt;Repo này là một lời bỏ phiếu cho việc bỏ qua màn mua sắm đó. Một monorepo cho web và mobile, được tổ chức bằng &lt;a href="https://viteplus.dev/" rel="noopener noreferrer"&gt;Vite+&lt;/a&gt;. Những công cụ đã đủ tốt, được giới thiệu cho nhau để ta có thể tập trung ship feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thỏa thuận
&lt;/h2&gt;

&lt;p&gt;Stack bên dưới là kế hoạch. Code mới là phần thưởng.&lt;/p&gt;

&lt;p&gt;Khi repo này đạt &lt;strong&gt;100 stars&lt;/strong&gt;, tôi sẽ build nó và phát hành dưới &lt;a href="https://opensource.org/licenses/MIT" rel="noopener noreferrer"&gt;MIT license&lt;/a&gt;. Miễn phí để dùng, miễn phí để sửa, miễn phí để đưa thẳng vào sản phẩm của mình. Không khóa học. Không paywall. Không có một gói enterprise ngồi chắn ngay những thứ ta thực sự cần.&lt;/p&gt;

&lt;p&gt;Một star mất hai giây. Nó có nghĩa: hãy build phần hệ thống nhàm chán, để tôi được build phần thú vị.&lt;/p&gt;

&lt;p&gt;Có thể ta muốn đợi đến khi code tồn tại. Nhưng code chỉ tồn tại khi có đủ vote. Chờ đợi chính là cách một stack tốt mãi nằm trong một bài blog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/VienDinhCom/vite-plus-full-stack" rel="noopener noreferrer"&gt;Star repo&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/VienDinhCom/vite-plus-full-stack" rel="noopener noreferrer"&gt;https://github.com/VienDinhCom/vite-plus-full-stack&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ta đang vote cho cái gì?
&lt;/h2&gt;

&lt;p&gt;Web và mobile. Một API. Một schema. Một auth. Một database. Từ laptop đến server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Một monorepo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://viteplus.dev/" rel="noopener noreferrer"&gt;Vite+&lt;/a&gt; là toolchain thống nhất đứng sau command &lt;code&gt;vp&lt;/code&gt;. Một công cụ gom những thứ trước đây ta phải tự nối bằng tay: Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt và Vite Task. Miễn phí, MIT license.&lt;/p&gt;

&lt;p&gt;Một file config. Một bộ command: &lt;code&gt;vp install&lt;/code&gt;, &lt;code&gt;vp dev&lt;/code&gt;, &lt;code&gt;vp check&lt;/code&gt;, &lt;code&gt;vp test&lt;/code&gt;, &lt;code&gt;vp build&lt;/code&gt;, &lt;code&gt;vp run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vp check&lt;/code&gt; format, lint và type-check chỉ trong một lượt, đồng thời tự sửa những lỗi mà nó biết cách sửa. Test dùng lại resolve và transform setup của app. Test runner tương thích với Jest API, mặc định cô lập các test và thậm chí có thể chạy test trong browser thật.&lt;/p&gt;

&lt;p&gt;Những con số về tốc độ là tuyên bố của Vite+, và chúng khá cụ thể. Core viết bằng Rust. Build production có thể nhanh hơn webpack tới 40 lần. Linting nhanh hơn ESLint khoảng 50 đến 100 lần. Formatting nhanh hơn Prettier tới 30 lần. Hot module replacement vẫn gần như tức thì. Trong monorepo, Vite Task cache công việc và chạy các package theo đúng thứ tự dependency.&lt;/p&gt;

&lt;p&gt;Ta chỉ phải duy trì một toolchain. Cùng một command có cùng một ý nghĩa ở mọi package.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web và mobile, cùng một ngôn ngữ
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://tanstack.com/start/latest" rel="noopener noreferrer"&gt;TanStack Start&lt;/a&gt; là web app. Full-stack React với type-safe routing, server-side rendering, streaming và server functions, chạy trên TanStack Router. Routes, loaders và links vẫn nằm đúng chỗ. Start bổ sung phần server. Một server function hiện ngay trong đoạn code gọi nó, với validator đứng ở đầu vào.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://expo.dev/" rel="noopener noreferrer"&gt;Expo&lt;/a&gt; là mobile app. Đây là React Native framework được đội ngũ React Native khuyến nghị: iOS, Android và web, cùng một hệ sinh thái native API lớn. File-based routing. Typed routes. Biết React là có thể ship app điện thoại. Swift hay Kotlin chỉ xuất hiện khi một màn hình thực sự cần đến chúng.&lt;/p&gt;

&lt;p&gt;Cùng TypeScript. Hai client. Một sản phẩm.&lt;/p&gt;

&lt;h3&gt;
  
  
  UI thuộc về mình
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt; cho cả web và mobile. Utility classes nằm ngay trong markup, rồi được ghép thành design mà ta thực sự muốn. Production build sẽ loại bỏ những CSS chưa từng dùng.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ui.shadcn.com/" rel="noopener noreferrer"&gt;shadcn/ui&lt;/a&gt; cho web components. Accessible, composable và được copy thẳng vào repo để ta tự sửa. Button là của ta. Library release không phải ông chủ của ta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnativereusables.com/" rel="noopener noreferrer"&gt;React Native Reusables&lt;/a&gt; cho mobile. shadcn/ui được đưa sang React Native, style bằng Nativewind hoặc Uniwind. UI trên điện thoại và UI trên website có thể cùng một gu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Một API, hai client
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://orpc.dev/" rel="noopener noreferrer"&gt;oRPC&lt;/a&gt; là nơi định nghĩa và implement server API. Cả hai client đều gọi API với end-to-end types. Khi partner, tài liệu hoặc một ngôn ngữ khác cần một HTTP contract bình thường, OpenAPI đã có sẵn. Có adapter cho TanStack Start và Expo, integration với Better Auth, cùng các helper hạng nhất cho &lt;a href="https://tanstack.com/query/latest" rel="noopener noreferrer"&gt;TanStack Query&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;TanStack Query quản lý server state. Component khai báo dữ liệu cần gì. Cache tự dedupe những request đang chạy, retry, refetch ở background và giữ stale data trên màn hình trong lúc network bắt kịp. Mutation có thể cập nhật UI trước rồi đồng bộ lại với server sau. Web và mobile cùng một cách làm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Schema đi được khắp nơi
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://zod.dev/" rel="noopener noreferrer"&gt;Zod&lt;/a&gt; là ngôn ngữ schema. TypeScript-first, không dependency, đủ nhỏ để chạy cả server lẫn client. Mô tả payload một lần. Parse khi dữ liệu đi vào. Infer type từ chính object đó. oRPC nhận Zod thông qua Standard Schema, nên API contract và validator thực chất là một.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://env.t3.gg/docs/introduction" rel="noopener noreferrer"&gt;T3 Env&lt;/a&gt; parse environment variables bằng chính Zod schema đó. Thiếu key thì app fail ngay lúc startup, kèm một message đọc được. Còn hơn là chạy thêm ba màn hình rồi mới crash. Server variables và client variables được tách riêng. Đọc server secret từ client thì nó cố tình throw error.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auth, data và những thứ còn lại của một sản phẩm thật
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://better-auth.com/" rel="noopener noreferrer"&gt;Better Auth&lt;/a&gt; nằm ngay trong application code. Email và password, sessions, social sign-in, organizations, roles, two-factor, passkeys và cả một danh sách plugin dài. Config là một file có thể review ngay trong pull request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orm.drizzle.team/" rel="noopener noreferrer"&gt;Drizzle ORM&lt;/a&gt; quản lý &lt;a href="https://www.postgresql.org/" rel="noopener noreferrer"&gt;Postgres&lt;/a&gt; bằng TypeScript: schema, queries và migrations. Row-Level Security nằm trong database. User nhìn thấy row của mình vì Postgres nói thế, kể cả khi handler quên mất một &lt;code&gt;where&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Những service xung quanh phần lõi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://react.email/" rel="noopener noreferrer"&gt;React Email&lt;/a&gt; viết email dưới dạng React components và gửi qua provider mà ta đang dùng.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://redis.io/" rel="noopener noreferrer"&gt;Redis&lt;/a&gt; giữ cache, rate limits và những state sống trong thời gian ngắn.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twilio.com/" rel="noopener noreferrer"&gt;Twilio&lt;/a&gt; lo phần điện thoại.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;Amazon S3&lt;/a&gt; lưu file ở production. Trên laptop, &lt;a href="https://rustfs.com/" rel="noopener noreferrer"&gt;RustFS&lt;/a&gt; nói cùng S3 API, nên code upload không cần đổi. RustFS là open source, Apache 2.0 và viết bằng Rust.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://opentelemetry.io/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt; thu thập traces, metrics và logs một lần, rồi export sang backend nào ta muốn sau này. oRPC có thể ghi lại những span đó xuyên suốt procedure call.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Laptop trước, server sau
&lt;/h3&gt;

&lt;p&gt;Docker chạy các local services: Postgres, Redis, RustFS và &lt;a href="https://mailpit.axllent.org/" rel="noopener noreferrer"&gt;Mailpit&lt;/a&gt;. Mailpit là một SMTP server nhỏ với web inbox. Nó render HTML, kiểm tra links, chấm điểm spam và cung cấp API cho test. Email reset password sẽ nằm ngay trên máy của ta cho đến khi ta quyết định một inbox thật nên nhận nó.&lt;/p&gt;

&lt;p&gt;Với VPS, &lt;a href="https://kamal-deploy.org/" rel="noopener noreferrer"&gt;Kamal&lt;/a&gt; deploy containerized app lên những Ubuntu server bình thường. Zero-downtime deploy, rolling restart và accessory services. Đưa IP address và SSH key cho nó. Nó cài Docker rồi ship. Đây cũng là cách 37signals từng dùng để đưa app của họ lên phần cứng mà họ kiểm soát.&lt;/p&gt;

&lt;p&gt;Ta cũng có thể deploy ở nơi mình đã có account: Amazon AWS, Vercel, Google Cloud, Railway, Fly.io và những nơi khác. TanStack Start giữ nguyên routes và server boundaries khi deploy target thay đổi. Kamal là con đường VPS. Cả stack vẫn portable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent đã biết nhà ở đâu
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://opencode.ai/" rel="noopener noreferrer"&gt;OpenCode&lt;/a&gt; là coding agent open source. Chạy trong terminal, desktop app hoặc IDE. Claude, GPT, Gemini, local model hoặc bất kỳ hơn 75 provider nào. Nó không lưu code hay context của ta.&lt;/p&gt;

&lt;p&gt;Ba công cụ giúp nó luôn biết mình đang đứng ở đâu trong repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/colbymchenry/codegraph" rel="noopener noreferrer"&gt;CodeGraph&lt;/a&gt; xây một local code knowledge graph và sync khi file thay đổi. Agent tốn ít token hơn để đi tìm đường. Graph vẫn nằm trên máy, và OpenCode đã hỗ trợ nó.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/dietrichgebert/ponytail" rel="noopener noreferrer"&gt;Ponytail&lt;/a&gt; hướng agent đến thay đổi nhỏ nhất nhưng vẫn giải quyết được vấn đề. Dòng code tốt nhất là dòng code không cần phải viết.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/bytebase/dbhub" rel="noopener noreferrer"&gt;DBHub&lt;/a&gt; là MCP server tiết kiệm token cho Postgres và các database khác. Mặc định chỉ có hai tools, để context window còn chỗ cho task. Read-only mode, row limits và timeouts có sẵn cho những lúc một câu hỏi không nên biến thành migration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ta sẽ làm gì với nó?
&lt;/h2&gt;

&lt;p&gt;Dùng nó. Ship feature.&lt;/p&gt;

&lt;p&gt;Màn hình là React. Style là Tailwind. Component là của ta. Payload là Zod schema. Call là oRPC. Cache là TanStack Query. Session là Better Auth. Row là Postgres, phía sau có RLS. Email là một React component. File nằm trên S3. Trace được OpenTelemetry thu lại. Agent nhìn được graph, database và cả instruction bảo nó viết ít code hơn.&lt;/p&gt;

&lt;p&gt;Từng công cụ trong số đó vốn đã tốt.&lt;/p&gt;

&lt;p&gt;Thứ còn thiếu là sự thống nhất giữa chúng.&lt;/p&gt;

&lt;h2&gt;
  
  
  Đến lượt ta
&lt;/h2&gt;

&lt;p&gt;Nếu đây là hệ thống mà ta sẽ ngồi ráp trong một cuối tuần rồi tiếp tục duy trì trong nhiều năm, hãy vote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100 stars. Tôi build. MIT license. Miễn phí.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/VienDinhCom/vite-plus-full-stack" rel="noopener noreferrer"&gt;Star VienDinhCom/vite-plus-full-stack now!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vite</category>
      <category>viteplus</category>
      <category>fullstack</category>
      <category>react</category>
    </item>
    <item>
      <title>ESMate: An Anti-Fatigue Toolkit for JavaScript/TypeScript Development</title>
      <dc:creator>Vien Dinh</dc:creator>
      <pubDate>Tue, 23 Dec 2025 14:37:00 +0000</pubDate>
      <link>https://dev.to/maxvien/esmate-an-anti-fatigue-toolkit-for-javascripttypescript-development-5c7c</link>
      <guid>https://dev.to/maxvien/esmate-an-anti-fatigue-toolkit-for-javascripttypescript-development-5c7c</guid>
      <description>&lt;p&gt;Starting a new JavaScript or TypeScript project often feels like a battle against configuration. Before you write a single line of business logic, you're usually stuck setting up ESLint, Prettier, TypeScript, Tailwind CSS, and testing tools. It's a repetitive, draining ritual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/VienDinhCom/esmate" rel="noopener noreferrer"&gt;ESMate&lt;/a&gt;&lt;/strong&gt; answers a simple question: &lt;em&gt;"How do we make modern JavaScript development smooth and easy, even in the Node.js world?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Inspired by the developer experience of Deno, ESMate provides a suite of tools and packages designed to simplify the modern web development workflow. It’s not a new runtime, but a helper layer that makes living in the Node.js ecosystem much more pleasant.&lt;/p&gt;

&lt;p&gt;Here is a tour of the ESMate ecosystem and how it can supercharge your development.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. esmate (CLI)
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;esmate&lt;/code&gt; CLI is the heart of the toolkit. It unifies common tasks into a single, cohesive interface.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lint &amp;amp; Format&lt;/strong&gt;: Wraps ESLint and Prettier with zero-config defaults.

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;esmate lint&lt;/code&gt; / &lt;code&gt;esmate fmt&lt;/code&gt;: Check and auto-fix your code.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Task Runner&lt;/strong&gt;: A powerful task runner compatible with &lt;code&gt;npm&lt;/code&gt; scripts but enhanced. Supports both sequential and parallel execution defined right in your &lt;code&gt;package.json&lt;/code&gt;.
&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; esmate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. create-esmate
&lt;/h3&gt;

&lt;p&gt;Forget copying and pasting old config files. &lt;code&gt;create-esmate&lt;/code&gt; is a scaffolding tool that sets up modern apps instantly. It supports React, Vue, Solid, Svelte, Astro, and Next.js out of the box.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create esmate@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also choose from robust templates like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;react-spa&lt;/strong&gt;: React + TanStack Router&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;react-astro&lt;/strong&gt;: React + Astro + TanStack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;react-next&lt;/strong&gt;: React + Next.js + Drizzle + Stripe&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Packages
&lt;/h2&gt;

&lt;p&gt;ESMate also provides a collection of packages that you can use individually or together.&lt;/p&gt;

&lt;h3&gt;
  
  
  @esmate/utils
&lt;/h3&gt;

&lt;p&gt;A comprehensive utility belt. It re-exports and unifies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;es-toolkit&lt;/strong&gt;: Modern, high-performance LODASH replacement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;math.js&lt;/strong&gt;: For complex math operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;String tools&lt;/strong&gt;: Advanced string manipulation (title casing, typo fixing).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  @esmate/react
&lt;/h3&gt;

&lt;p&gt;React development made easier.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: Includes the full power of &lt;a href="https://ahooks.js.org/" rel="noopener noreferrer"&gt;ahooks&lt;/a&gt; (&lt;code&gt;useRequest&lt;/code&gt;, &lt;code&gt;usePagination&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Hooks&lt;/strong&gt;: specialized hooks like &lt;code&gt;useImmutableState&lt;/code&gt; (powered by Immer) and &lt;code&gt;useSearchParams&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  @esmate/shadcn
&lt;/h3&gt;

&lt;p&gt;If you use shadcn/ui, you'll love this. It bundles shadcn components, hooks, and styles into a single installable package.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Config&lt;/strong&gt;: Works with Tailwind automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-built UI&lt;/strong&gt;: Import components like &lt;code&gt;import { Button } from "@esmate/shadcn/components/ui/button"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundled Deps&lt;/strong&gt;: No need to manually install &lt;code&gt;zod&lt;/code&gt;, &lt;code&gt;react-hook-form&lt;/code&gt;, or &lt;code&gt;radix-ui&lt;/code&gt; primitives—they are all re-exported.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  @esmate/eslint &amp;amp; @esmate/prettier
&lt;/h3&gt;

&lt;p&gt;Opinionated but configurable setups "for humans".&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;@esmate/eslint&lt;/strong&gt;: A wrapper around &lt;code&gt;@antfu/eslint-config&lt;/code&gt; tuned for React, Vue, Astro, and Svelte.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@esmate/prettier&lt;/strong&gt;: Includes the Tailwind CSS plugin and sensible defaults.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Switch?
&lt;/h2&gt;

&lt;p&gt;We believe developers should spend their time &lt;strong&gt;building&lt;/strong&gt;, not configuring. ESMate lets you skip the boilerplate ritual and get straight to the work that matters.&lt;/p&gt;

&lt;p&gt;Give it a try today: &lt;a href="https://github.com/VienDinhCom/esmate" rel="noopener noreferrer"&gt;https://github.com/VienDinhCom/esmate&lt;/a&gt;&lt;/p&gt;

</description>
      <category>eslint</category>
      <category>prettier</category>
      <category>node</category>
      <category>react</category>
    </item>
    <item>
      <title>Enhance Your English Listening Skills with Hocify: The Game-Changing Transcription Tool!</title>
      <dc:creator>Vien Dinh</dc:creator>
      <pubDate>Sun, 22 Oct 2023 10:32:35 +0000</pubDate>
      <link>https://dev.to/maxvien/enhance-your-english-listening-skills-with-hocify-the-game-changing-transcription-tool-3p2m</link>
      <guid>https://dev.to/maxvien/enhance-your-english-listening-skills-with-hocify-the-game-changing-transcription-tool-3p2m</guid>
      <description>&lt;p&gt;Hey there! Are you trying to get better at understanding English when people talk? Well, I have something super cool for you. It's called &lt;strong&gt;Hocify&lt;/strong&gt;! With &lt;strong&gt;Hocify&lt;/strong&gt;, you can practice your listening skills by transcribing what you hear. Sounds fun, right?&lt;/p&gt;

&lt;p&gt;Here's how it works. First, you open up &lt;strong&gt;Microsoft Edge&lt;/strong&gt;, a type of internet program. If you have a newer &lt;strong&gt;Windows&lt;/strong&gt;, you probably already have it. If you use a &lt;strong&gt;Mac&lt;/strong&gt; or &lt;strong&gt;Linux&lt;/strong&gt;, you can download it for free from this link: &lt;a href="https://www.microsoft.com/vi-vn/edge/download"&gt;https://www.microsoft.com/vi-vn/edge/download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, you click on this link: &lt;a href="https://www.hocify.com/transcribe"&gt;https://www.hocify.com/transcribe&lt;/a&gt;. You can find a story or something you like in English and copy and paste it into the &lt;strong&gt;Hocify&lt;/strong&gt; box to start practicing. If you want to hear the part you're typing again, just press the &lt;strong&gt;Play&lt;/strong&gt; button. If you don't understand a word, no worries! Just click on the &lt;strong&gt;Hint&lt;/strong&gt; button, and Hocify will help you out.&lt;/p&gt;

&lt;p&gt;Now, you might be wondering, "Why use &lt;strong&gt;Hocify&lt;/strong&gt;?" Well, imagine when you were young and learning how to spell in your own language. It's kind of like that, but for English! By transcribing what you hear, you not only train your ears to catch difficult words, but you also learn how to write those words correctly.&lt;/p&gt;

&lt;p&gt;You might be thinking, "Transcribing English is hard and takes so much time!" I get it. Normally, you'd have to download audio, use a special program to listen and replay, and then check if you wrote everything correctly. It can be exhausting! But with &lt;strong&gt;Hocify&lt;/strong&gt;, you don't need any fancy stuff. Just find a text you like, copy, and paste it. &lt;strong&gt;Hocify&lt;/strong&gt; will help you transcribe with a standard American accent right away.&lt;/p&gt;

&lt;p&gt;Oh, and one more thing! Make sure to use &lt;strong&gt;Hocify&lt;/strong&gt; with &lt;strong&gt;Microsoft Edge&lt;/strong&gt; on &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;Mac&lt;/strong&gt;, or &lt;strong&gt;Linux&lt;/strong&gt; for the best experience.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Hocify&lt;/strong&gt; to transcribe doesn't just improve your listening, but it also helps with your pronunciation. It's like hitting two birds with one stone! You'll become a pro in understanding and speaking English in no time. Unlike passive listening methods, active listening through transcribing helps you truly understand how a word is pronounced and spelled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hocify&lt;/strong&gt; makes the whole learning process smooth and enjoyable, just like playing a game without any pressure. Give &lt;strong&gt;Hocify&lt;/strong&gt; a try! You won't regret it. Have fun learning and improving your listening skills with &lt;strong&gt;Hocify&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Click here to start transcribing in English with &lt;strong&gt;Hocify&lt;/strong&gt;: &lt;a href="https://www.hocify.com/transcribe"&gt;https://www.hocify.com/transcribe&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
