{"id":13572890,"url":"https://github.com/shaunchander/astro-pwa-starter","last_synced_at":"2026-04-04T15:05:00.182Z","repository":{"id":58492996,"uuid":"531765254","full_name":"shaunchander/astro-pwa-starter","owner":"shaunchander","description":"✨ An opinionated Astro starter for building robust static websites.","archived":false,"fork":false,"pushed_at":"2024-02-05T02:36:07.000Z","size":809,"stargazers_count":236,"open_issues_count":3,"forks_count":49,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-04T11:37:06.926Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"astro-pwa-starter.vercel.app","language":"Astro","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shaunchander.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-02T03:14:21.000Z","updated_at":"2025-03-27T13:02:56.000Z","dependencies_parsed_at":"2024-01-14T03:51:03.738Z","dependency_job_id":"cfabe397-2453-452a-be2c-14e5c34c37ad","html_url":"https://github.com/shaunchander/astro-pwa-starter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shaunchander/astro-pwa-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaunchander%2Fastro-pwa-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaunchander%2Fastro-pwa-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaunchander%2Fastro-pwa-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaunchander%2Fastro-pwa-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shaunchander","download_url":"https://codeload.github.com/shaunchander/astro-pwa-starter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaunchander%2Fastro-pwa-starter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31403952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T15:00:23.340Z","updated_at":"2026-04-04T15:05:00.106Z","avatar_url":"https://github.com/shaunchander.png","language":"Astro","funding_links":[],"categories":["Astro"],"sub_categories":[],"readme":"\u003cimg align=\"center\" width=\"1725\" alt=\"Screen Shot 2022-09-03 at 10 09 25 AM\" src=\"https://user-images.githubusercontent.com/5169985/188276737-322f1e21-08a9-4b84-8a83-b394507f302d.png\"\u003e\n\n\n\u003ch1 align=\"center\"\u003e🟢 astro-pwa-starter\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003eAn opinionated Astro starter for building robust static websites.\u003c/p\u003e\n\n## ✨ Feature Set\n\n- ✅ Full PWA support out-of-the-box.\n- ✅ Achieves a 100 SEO score out-of-the-box.\n- ✅ Comes with TailwindCSS pre-installed.\n- ✅ Full TypeScript support.\n- ✅ Framework agnostic.\n- ✅ Has sensible ESLint and Prettier configurations baked-in.\n- ✅ Includes recommended SEO meta tags and favicons\n- ✅ Straight-forward file structure, import aliases, and developer experience.\n\n## 📦 Dependencies\n\nHere is a list of core dependencies that astro-pwa-starter relies on in case you need to extend the starter/look into more documentation:\n\n| Package                                                                               | Purpose                                                                                               |\n| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| [`@astrojs/sitemap` ](\u003c[https://](https://www.npmjs.com/package/@astrojs/sitemap)\u003e)   | Generates an accessible sitemap for Astro websites.                                                   |\n| [`@astrojs/tailwind` ](\u003c[https://](https://www.npmjs.com/package/@astrojs/tailwind)\u003e) | Automatically sets up TailwindCSS.                                                                    |\n| [`astro-compress` ](\u003c[https://](https://www.npmjs.com/package/astro-compress)\u003e)       | Compresses all static assets into minified files.                                                     |\n| [`astro-seo` ](\u003c[https://](https://www.npmjs.com/package/astro-seo)\u003e)                 | Provides a helpful component for configuring SEO.                                                     |\n| [`vite-plugin-pwa` ](\u003c[https://](https://www.npmjs.com/package/vite-plugin-pwa)\u003e)     | Configures a service-worker for offline-accessability and generates a webmanifest for PWA compliance. |\n\n## 🤖 Commands\n\nAll commands are run from the root of the project, from a terminal:\n\n| Command                | Action                                             |\n| :--------------------- | :------------------------------------------------- |\n| `pnpm install`          | Installs dependencies                              |\n| `pnpm run dev`          | Starts local dev server at `localhost:3000`        |\n| `pnpm run build`        | Build your production site to `./dist/`            |\n| `pnpm run preview`      | Preview your build locally, before deploying       |\n| `pnpm run astro ...`    | Run CLI commands like `astro add`, `astro preview` |\n| `pnpm run astro --help` | Get help using the Astro CLI                       |\n\n## 👋 Getting Started Guide\n\n### Introduction and prerequisites\n\nastro-pwa-starter is an opinionated Astro starter, meaning it ships with a pre-determined file structure and procedure for doing things. In this getting started guide we'll walk you through how to use the starter for your project.\n\n---\n\n### Understanding the project structure\n\nFirst, and foremost, is the project structure, in other words, how the files are laid out in the project. The starter follows a very similar convention to the one seen [in Astro's own documentation](\u003c[https://](https://docs.astro.build/en/core-concepts/project-structure/)\u003e). However, we've made some changes:\n\n1. Every static asset should be placed inside `/src/assets/` instead of the public folder, there are two subfolders (`/img` and `/svg`) to distinguish between images and graphics.\n2. Use the `/utils` to include any helper scripts or configuration files like GraphQL clients or TypeScript types.\n3. The `src/components/globals` folder contains three premade global components: the site header, footer, and layout (we'll talk about the layout in a bit).\n\nMost of where you'll work is directly inside `/src`. If you're curious to know what **every** file and directory in the starter does, checkout the documentation after reading this guide.\n\n---\n\n### Creating pages\n\nWhen you create a new page, place it inside the `/src/pages/` directory and make sure it's a `.astro` file. Then, import the `\u003cLayout /\u003e` component as such:\n\n```html\n---\nimport { Layout } from \"@globals\"\n---\n\n\u003cLayout title=\"Home Page\"\u003e // ... \u003c/Layout\u003e\n```\n\nYou'll notice we imported the component from `@globals`, we'll talk about that later.\n\nThe `\u003cLayout /\u003e` global component is responsible for rendering your website's `\u003cheader /\u003e`, `\u003cmain /\u003e`, and `\u003cfooter /\u003e` tags. Not only that, it also injects page-specific SEO such as a page title and description. Refer to the documentation on `\u003cLayout /\u003e` to see what props you can pass to it.\n\nMake sure to always include a layout component on every page!\n\n---\n\n### Creating components\n\nPlace new components inside the `/src/components` directory.\n\nWe **highly recommend** for you to follow a directory-based approach when creating new components. That is, create a new directory inside of `/src/components` such as `/src/components/HelloWorld`, then place your component logic inside. The structure should look like this:\n\n```\ncomponents\n└── HelloWorld\n    ├── HelloWorld.astro\n    └── index.ts\n```\n\nYou'll notice we also threw in a `index.ts` file. This is where you should export the component as a **named export**:\n\n```ts\n// index.ts\n\nexport { default as HelloWorld } from \"./HelloWorld.astro\"\n```\n\nDoing a directory-based approach and named export is good for two reasons:\n\n1. It compartamentalizes **all** component logic into discrete folders (including styles or extra scripts)\n2. It prevents you from accidently renaming a component later on in the project (named exports help with naming consistency).\n\nWhen you want to use `\u003cHelloWorld /\u003e`, you can import it using our handy-dandy import aliases:\n\n```ts\nimport { HelloWorld } from \"@component/HelloWorld\"\n```\n\nAgain, we'll talk about import aliasing in more detail in a bit!\n\n---\n\n### Working with images and SVGs\n\nWe mentioned it briefly before but there exists a `/src/assets` directory where you're supposed to throw in your images and SVGs. This directoy actually has two subdirectories that look like this:\n\n```\nassets\n  img\n  svg\n    icons\n```\n\nIt's straightforward but just to make it clear:\n\n- Add all your .png, .jpeg, .avif, .webp, etc. into the `img` directory\n- Add all your SVGs into the `svg` directory or `svg/icons` directory depending on if it's an icon or regular graphic.\n\nYou can then reference your static assets using an import alias like so:\n\n```\nimport MyAwesomeImage from \"@img/my-awesome-image.png\"\nimport SVGBackground from \"@svg/svg-background.svg\"\nimport SomeIcon from \"@icon/some-icon.svg\n```\n\nAgain we will talk about import aliases in more detail soon!\n\n---\n\n### Configuring the default SEO\n\nastro-pwa-starter ships with an SEO configuration file to setup defaults for your website!\n\nYou'll find it inside the `/utils` folder (note, we put it there because it's a configuration file!). It's called `seoConfig.ts` and it exports two very important objects:\n\n- seoConfig\n- manifest\n\n`seoConfig` is used in the `\u003cLayout /\u003e` component to set **default SEO** values. These include values like a site-wide description, site-wide thumbnail, etc. If you pass props to `\u003cLayout /\u003e` then those will **overwrite** the default SEO values.\n\n`manifest` is used to generate your website manifest file, which is important for PWA-compliance.\n\nThere are helpful comments within `seoConfig.ts` that will guide you when configuring and customizing the file.\n\nMake sure you fully customize every recommended field to take full advantage of astro-pwa-starter's built-in SEO optimization!\n\n**Don't forget to also** customize the color themes present in `\u003cLayout /\u003e` and `browserconfig.xml`!\n\nIf you want to learn more about `seoConfig.ts`, checkout the documentation after finishing this guide.\n\n---\n\n### Customizing SEO for a page\n\nWe briefly mentioned it before but the global `\u003cLayout /\u003e` component also handles your page's SEO. You can pass it different, SEO-based props like `title`, `description`, or `image` to set the page's title, description, and OpenGraph Thumbnail:\n\n```html\n---\nimport { Layout } from \"@globals\"\n---\n\n\u003cLayout title=\"Home Page\" description=\"Welcome to my website's homepage!\"\u003e\n\t// ...\n\u003c/Layout\u003e\n```\n\nIf you're working with an error page like `404.astro`, then you can pass a `disableIndexing` prop to completely remove the page from crawlers:\n\n```html\n---\nimport { Layout } from \"@globals\"\n---\n\n\u003cLayout title=\"Not Found\" disableIndexing=\"{true}\"\u003e\u003c/Layout\u003e\n```\n\n---\n\n### Using a custom favicon\n\nWe recommend using a service like [Favycon](https://favycon.vercel.app/) to generate your website's favicons (this is what we used). Make sure you have a 512x512 maskable icon before generating your favicons!\n\nAfter generation, you can directly paste your favicons straight into `/public/favicons`. Make sure to overwrite/replace all favicons in the directory. Afterwards, you'll be up and running with your own custom favicon.\n\nsyncore-astro-starter is already pre-configured to pull favicons from `/public/favicons`, so as long as you used Favycon/have the exact same favicons we had originally then the starter will be able to automatically pull and inject your favicons in the final build.\n\n---\n\n### Import aliases\n\nFinally, import aliases.\n\nOne the best features of astro-pwa-starter is its extensive list of import aliases.\n\nFor those unfamiliar with import aliases, they make working with components and external assets much easier. Instead of having to directly reference an asset like such:\n\n```ts\nimport { MyComponent } from \"../../components/MyComponent\"\nimport SomeImage from \"../../assets/img/some-image.png\"\n```\n\nYou instead can do something more streamlined:\n\n```ts\nimport { MyComponent } from \"@component/MyComponent\"\nimport SomeImage from \"@img/some-image.png\"\n```\n\nThe best part about this is that **you can use an import alias at any level in your website** and still be able to access the asset you're trying to reach. No more `../../../../` hell.\n\nFor quick reference, here's a list of all import aliases available to you:\n\n| Alias          | Purpose                             | Example                                                 |\n| -------------- | ----------------------------------- | ------------------------------------------------------- |\n| `@globals`     | Fetch global components             | `import { Layout } from \"@globals`                      |\n| `@component/*` | Fetch regular components            | `import { PriceTable } from \"@component/PriceTable`     |\n| `@util/*`      | Import utilities                    | `import { seoConfig, manifest } from \"@util/seoConfig\"` |\n| `@img/*`       | Imports images                      | `import MyImage from \"@img/my-image.png\"`               |\n| `@svg/*`       | Imports SVGs                        | `import MySVG from \"@svg/my-svg.svg`                    |\n| `@icon/*`      | Imports SVG icons from `/svg/icons` | `import MyIcon from \"@icon/my-icon.svg`                 |\n| `@style/*`     | Fetches stylesheets                 | `import \"@style/tailwind.css\"`                          |\n\n## 📖 Documentation\n\nThis documentation looks at astro-pwa-starter from a top-down perspective, providing insight into every directory and file available in the base starter.\n\n### File structure\n\nThe base project structure looks like this:\n\n```\n.vscode\npublic\n├── favicons\n├── browserconfig.xml\n├── humans.txt\n└── robots.txt\nsrc\n├── assets\n│   ├── img\n│   └── svg\n│       └── icons\n├── components\n│   └── global\n│       ├── Footer\n│       │   ├── Footer.astro\n│       │   └── index.ts\n│       ├── Header\n│       │   ├── Header.astro\n│       │   └── index.ts\n│       └── Layout\n│           ├── index.ts\n│           └── Layout.astro\n├── pages\n│   └── index.astro\n├── styles\n│   └── tailwind.css\n└── env.d.ts\nutils\n└── seoConfig.ts\n.editorconfig\n.env\n.eslintrc.js\n.gitignore\n.npmrc\n.prettierignore\n.prettierrc.js\nastro.config.ts\npackage.json\nREADME.md\ntailwind.config.js\ntsconfig.json\n```\n\n---\n\n### `/.vscode`\n\nThis directory contains VSCode-related configurations and recommended extensions.\n\n---\n\n### `/public`\n\nThis directory contains all public website assets. Astro will not parse any of these files and will serve them as is.\n\n#### `/favicons`\n\nWebsite favicons.\n\n#### `browserconfig.xml`\n\nDefines how OSs should use and theme the website's favicon.\n\nYou should only modify the `\u003cTileColor /\u003e` tag to match with the website's primary color.\n\n#### `humans.txt`\n\nDefines people/organizations who worked on the website. Refer to [humans.txt](https://www.google.com/search?q=humans.txt\u0026oq=human\u0026aqs=chrome.0.69i59j69i57l2j0i271l3j69i60l2.739j0j4\u0026sourceid=chrome\u0026ie=UTF-8) for more information.\n\n#### `robots.txt`\n\nDefines how browser crawlers should index the website.\n\nYou do not need to modify this file.\n\n---\n\n### `/src`\n\nContains all pages and components the website utilizes. This is where most of the coding-action takes place.\n\nEvery file within src will be transformed according to Astro and Vite's build tools.\n\n#### `/assets`\n\nAssets contains all images, svgs, and icons used in the website. It is placed inside the `src` folder so that Vite transformations can be made to assets.\n\n#### `/img`\n\nContains all images for use on the website. You should not place .svg files in this directory.\n\nImages are accessible to the website via the `@img/*` import alias. You can import images like this:\n\n```html\n---\nimport BackgroundImage from \"@img/background-image.png\"\n---\n\n\u003cimg src=\"{BackgroundImage}\" alt=\"A sunny blue sky\" /\u003e\n```\n\n#### `/svg`\n\nContains all SVGs the website uses. You should not place .jpg | .png | .webp or other image-based files into this directory.\n\nSVGs can be imported using the `@svg/*` import alias. You can import SVGs like this:\n\n```html\n---\nimport WavyPatterns from \"@svg/wavy-patterns.svg\"\n---\n\n\u003cimg src=\"{WavyPatterns}\" alt=\"\" /\u003e\n```\n\n##### `/icons`\n\nContains all icons that the website will use. Only .svg files should go in here.\n\nYou can import icons using the @svg/icons/\\* import alias.\n\n#### `/components/`\n\nDefines site-wide components. Every component should be placed inside a directory that has the same name as the exported component.\n\nComponents can be imported using the `@component/*` import alias. For example:\n\n```html\n---\nimport {CustomComponent} from \"@component/CustomComponent\"\n---\n\n\u003cCustomComponent /\u003e\n```\n\n##### `/global`\n\nContains components that are considered to be global across the website.\n\nYou most likely will not need to add components here.\n\n###### `Footer.astro`\n\nDefines the footer for the website. This component does not take any props.\n\n###### `Header.astro`\n\nDefines the header for the website. This component does not take any props.\n\n###### `Layout.astro`\n\nDefines the global layout for the website. This component will wrap every single page in the website and append the `\u003cHeader/\u003e` and `\u003cFooter/\u003e` components where necessary. It will also manage SEO for the website.\n\nRefer to the following as an example of how to set SEO:\n\n```html\n---\nimport {Layout} from \"@utils\"\n---\n\n\u003cLayout title=\"Page title\" description=\"This is the page description\"\u003e\n\t// ...\n\u003c/Layout\u003e\n```\n\n**Props**\n\n| Name            | Type                       | Required? | Description                                                               |     |\n| --------------- | -------------------------- | --------- | ------------------------------------------------------------------------- | --- |\n| title           | String                     | Yes       | Title of the page.                                                        |     |\n| ogTitle         | String                     | No        | OpenGraph title for the page (can be longer than title)                   |     |\n| description     | String                     | No        | Description of the page. If not set then the default description is used. |     |\n| image           | {url: string, alt: string} | No        | Image thumbnail for the page. If not set then the default image is used.  |     |\n| disableIndexing | Boolean                    | No        | Whether or not to disable indexing.                                       |     |\n\n#### `/pages`\n\nContains all pages for the website.\n\nAstro uses file-based routing, meaning that all .astro files inside of the pages directory will directly convert into paths on the final website.\n\nFor example, /pages/test.astro will be accessible on the final website at /test.\n\nAll pages should use the Layout component. You should also define SEO for each page through the Layout component. Refer back to the `\u003cLayout /\u003e` component to see how to add SEO.\n\n#### `/styles`\n\nContains `.css` files.\n\n##### `tailwind.css`\n\nDefines the default configuration for TailwindCSS as well as any custom CSS needed for the website.\n\n#### `env.d.ts`\n\nDefines custom typings for the environment. This is used in conjunction with `.env` to add type support for any environment variables.\n\nRefer to [Astro's docs on typed environment variables](https://docs.astro.build/en/guides/typescript/) for more information.\n\n---\n\n### `/utils`\n\nDefines external utilities for the website. These can be third-party scripts that require additional setup and configuration, packages such as `graphql-request` or `firebase`, or configuration files written in TypeScript.\n\nAll utilities can be imported into the website using the `@util/*` import alias, example:\n\n```html\n---\n// ...\nimport { seoConfig } from \"@util/seoConfig\"\n---\n\n// seoConfig is now a useable object\n```\n\n#### `seoConfig.ts`\n\nDefines the default SEO configuration for the website. This exports a large object with props that come from [astro-seo](https://www.npmjs.com/package/astro-seo). It also defines the manifest configuration for the site's PWA integration\n\nThe default configuration is:\n\n```ts\n// Type imports\nimport type { ManifestOptions } from \"vite-plugin-pwa\"\n\n/**\n * Defines the default SEO configuration for the website.\n */\nexport const seoConfig = {\n\tbaseURL: \"https://example.com\", // Change this to your production URL.\n\tdescription:\n\t\t\"Astro PWA Starter is an opionated Astro starter for building robust static websites.\", // Change this to be your website's description.\n\ttype: \"website\",\n\timage: {\n\t\turl: \"https://picsum.photos/1200/630\", // Change this to your website's thumbnail.\n\t\talt: \"OpenGraph thumbnail description.\", // Change this to your website's thumbnail description.\n\t\twidth: 1200,\n\t\theight: 630\n\t},\n\tsiteName: \"Astro PWA Starter\", // Change this to your website's name,\n\ttwitter: {\n\t\tcard: \"summary_large_image\"\n\t}\n}\n\n/**\n * Defines the configuration for PWA webmanifest.\n */\nexport const manifest: Partial\u003cManifestOptions\u003e = {\n\tname: \"Astro PWA Starter\",\n\tshort_name: \"Astro PWA Starter\",\n\tdescription:\n\t\t\"Astro PWA Starter is an opionated Astro starter for building robust static websites.\",\n\ttheme_color: \"#30E130\",\n\tbackground_color: \"#ffffff\",\n\tdisplay: \"minimal-ui\",\n\ticons: [\n\t\t{\n\t\t\tsrc: \"/favicons/favicon-192x192.png\",\n\t\t\tsizes: \"192x192\",\n\t\t\ttype: \"image/png\"\n\t\t},\n\t\t{\n\t\t\tsrc: \"/favicons/favicon-512x512.png\",\n\t\t\tsizes: \"512x512\",\n\t\t\ttype: \"image/png\"\n\t\t},\n\t\t{\n\t\t\tsrc: \"/favicons/favicon-512x512.png\",\n\t\t\tsizes: \"512x512\",\n\t\t\ttype: \"image/png\",\n\t\t\tpurpose: \"any maskable\"\n\t\t}\n\t]\n}\n```\n\n---\n\n### `.editorconfig`\n\nDefines configurations for code indentation and end-of-line styling.\n\nThis file should not be modified so as to keep a consistent code environment across IDEs.\n\nYou don't need to modify this file.\n\n---\n\n### `.env`\n\nContains environment variables.\n\nVite will inject these variables into the website at runtime.\n\nAny public-facing environment variable should be prefixed with `PUBLIC_`.\n\n---\n\n### `.eslintrc.js`\n\nDefines linting rules for Astro, Svelte, and TypeScript files.\n\nYou don't need to modify this file (unless you want to extend the ESLint configuration).\n\n---\n\n### `.gitignore`\n\nIgnores files and directors from git version control.\n\nYou don't need to modify this file (unless you need to ignore additional files).\n\n---\n\n### `.npmrc`\n\nSpecific configuration to allow pnpm to resolve Astro dependencies.\n\nThis file should not be modified.\n\n---\n\n### `.prettierignore`\n\nIgnores files from Prettier linting.\n\nThis file should not be modified.\n\n---\n\n### `.prettierrc.js`\n\nDefines a Prettier configuration for formatting Astro, Svelte, and TypeScript files.\n\nThis file should not be modified (unless you want to extend any Prettier rules).\n\n---\n\n### `astro.config.ts`\n\nDefines the configuration used by Astro. Follow documentation for the config file [over at Astro's documentation website](https://docs.astro.build/en/reference/configuration-reference/)\n\n---\n\n### `package.json`\n\nDefines all Node packages.\n\n---\n\n### `README.md`\n\nREADME file for the starter.\n\n---\n\n### `tailwind.config.ts`\n\nConfiguration file for TailwindCSS.\n\n---\n\n### `tsconfig.json`\n\nDefines configurations for TypeScript.\n\nThis file should not be modified.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshaunchander%2Fastro-pwa-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshaunchander%2Fastro-pwa-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshaunchander%2Fastro-pwa-starter/lists"}