diff --git a/packages/docs b/packages/docs
deleted file mode 160000
index de99749..0000000
--- a/packages/docs
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit de99749cd5443a76b8603743db918f9c8c908c3c
diff --git a/packages/docs/.eslintignore b/packages/docs/.eslintignore
new file mode 100644
index 0000000..73d2683
--- /dev/null
+++ b/packages/docs/.eslintignore
@@ -0,0 +1,33 @@
+**/*.log
+**/.DS_Store
+*.
+.vscode/settings.json
+.history
+.yarn
+bazel-*
+bazel-bin
+bazel-out
+bazel-qwik
+bazel-testlogs
+dist
+dist-dev
+lib
+lib-types
+etc
+external
+node_modules
+temp
+tsc-out
+tsdoc-metadata.json
+target
+output
+rollup.config.js
+build
+.cache
+.vscode
+.rollup.cache
+dist
+tsconfig.tsbuildinfo
+vite.config.ts
+*.spec.tsx
+*.spec.ts
diff --git a/packages/docs/.eslintrc.cjs b/packages/docs/.eslintrc.cjs
new file mode 100644
index 0000000..32abdc8
--- /dev/null
+++ b/packages/docs/.eslintrc.cjs
@@ -0,0 +1,40 @@
+module.exports = {
+ root: true,
+ env: {
+ browser: true,
+ es2021: true,
+ node: true,
+ },
+ extends: [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:qwik/recommended",
+ ],
+ parser: "@typescript-eslint/parser",
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ["./tsconfig.json"],
+ ecmaVersion: 2021,
+ sourceType: "module",
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ plugins: ["@typescript-eslint"],
+ rules: {
+ "@typescript-eslint/no-explicit-any": "off",
+ "@typescript-eslint/explicit-module-boundary-types": "off",
+ "@typescript-eslint/no-inferrable-types": "off",
+ "@typescript-eslint/no-non-null-assertion": "off",
+ "@typescript-eslint/no-empty-interface": "off",
+ "@typescript-eslint/no-namespace": "off",
+ "@typescript-eslint/no-empty-function": "off",
+ "@typescript-eslint/no-this-alias": "off",
+ "@typescript-eslint/ban-types": "off",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "prefer-spread": "off",
+ "no-case-declarations": "off",
+ "no-console": "off",
+ "@typescript-eslint/no-unused-vars": ["error"],
+ },
+};
diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore
new file mode 100644
index 0000000..a88d7a8
--- /dev/null
+++ b/packages/docs/.gitignore
@@ -0,0 +1,43 @@
+# Build
+/dist
+/lib
+/lib-types
+/server
+
+# Development
+node_modules/
+
+# Cache
+.cache
+.mf
+.vscode
+.rollup.cache
+tsconfig.tsbuildinfo
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+# Editor
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# Yarn
+.yarn/*
+!.yarn/releases
+
+package-lock.json
+
+# Cloudflare
+functions/**/*.js
diff --git a/packages/docs/.node-version b/packages/docs/.node-version
new file mode 100644
index 0000000..b6a7d89
--- /dev/null
+++ b/packages/docs/.node-version
@@ -0,0 +1 @@
+16
diff --git a/packages/docs/.prettierignore b/packages/docs/.prettierignore
new file mode 100644
index 0000000..1592248
--- /dev/null
+++ b/packages/docs/.prettierignore
@@ -0,0 +1,6 @@
+# Files Prettier should not format
+**/*.log
+**/.DS_Store
+*.
+dist
+node_modules
diff --git a/packages/docs/.stackblitzrc b/packages/docs/.stackblitzrc
new file mode 100644
index 0000000..43798ec
--- /dev/null
+++ b/packages/docs/.stackblitzrc
@@ -0,0 +1,6 @@
+{
+ "startCommand": "npm start",
+ "env": {
+ "ENABLE_CJS_IMPORTS": true
+ }
+}
\ No newline at end of file
diff --git a/packages/docs/LICENSE.md b/packages/docs/LICENSE.md
new file mode 100644
index 0000000..81566ba
--- /dev/null
+++ b/packages/docs/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 onWidget
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/docs/README.md b/packages/docs/README.md
new file mode 100644
index 0000000..b5f99a5
--- /dev/null
+++ b/packages/docs/README.md
@@ -0,0 +1,240 @@
+# π Qwind
+
+**Qwind** is a free and open-source template to make your website using **[Qwik](https://qwik.builder.io/) + [Tailwind CSS](https://tailwindcss.com/)**. Ready to start a new project and designed taking into account best practices.
+
+## Features
+
+- β Integration with **Tailwind CSS** supporting **Dark mode**.
+- β **Production-ready** scores in [Lighthouse](https://web.dev/measure/) and [PageSpeed Insights](https://pagespeed.web.dev/) reports.
+- β **Image optimization** and **Font optimization**.
+
+
+
+
+
+[](https://onwidget.com)
+[](https://github.com/onwidget/qwind/blob/main/LICENSE.md)
+[](https://github.com/onwidget)
+[](https://github.com/onwidget/qwind#contributing)
+[](https://snyk.io/test/github/onwidget/qwind)
+
+
+
+
+Table of Contents
+
+- [Demo](#demo)
+- [Getting started](#getting-started)
+ - [Project structure](#project-structure)
+ - [Commands](#commands)
+ - [Configuration](#configuration)
+ - [Deploy](#deploy)
+- [Roadmap](#roadmap)
+- [Contributing](#contributing)
+- [Acknowledgements](#acknowledgements)
+- [License](#license)
+
+
+
+
+
+## Demo
+
+π [https://qwind.pages.dev/](https://qwind.pages.dev/)
+
+
+
+## Getting started
+
+This project is using Qwik with [QwikCity](https://qwik.builder.io/qwikcity/overview/). QwikCity is just a extra set of tools on top of Qwik to make it easier to build a full site, including directory-based routing, layouts, and more.
+
+### Project structure
+
+Inside **Qwind** template, you'll see the following folders and files:
+
+```
+/
+βββ adaptors/
+| βββ static/
+| βββ vite.config.ts
+βββ public/
+β βββ favicon.svg
+β βββ manifest.json
+β βββ robots.txt
+βββ src/
+β βββ assets/
+β β βββ images/
+| | βββ styles/
+| | βββ global.css
+β βββ components/
+β β βββ atoms/
+β β βββ core/
+β β βββ icons/
+| | βββ widgets/
+| | βββ Header.astro
+| | βββ Footer.astro
+| | βββ ...
+β βββ routes/
+β | βββ blog/
+β | βββ index.astro
+| | βββ layout.tsx
+| | β-- service-worker.ts
+β βββ config.mjs
+β βββ entry.dev.tsx
+β βββ entry.preview.tsx
+β βββ entry.ssr.tsx
+β βββ root.tsx
+βββ package.json
+βββ ...
+```
+
+- `src/routes`: Provides the directory based routing, which can include a hierarchy of `layout.tsx` layout files, and an `index.tsx` file as the page. Additionally, `index.ts` files are endpoints. Please see the [routing docs](https://qwik.builder.io/qwikcity/routing/overview/) for more info.
+
+- `src/components`: Recommended directory for components.
+
+- `public`: Any static assets, like images, can be placed in the public directory. Please see the [Vite public directory](https://vitejs.dev/guide/assets.html#the-public-directory) for more info.
+
+[](https://githubbox.com/onwidget/qwind/tree/main)
+
+> **Seasoned qwik expert?** Delete this file. Update `config.mjs` and contents. Have fun!
+
+
+
+### Commands
+
+All commands are run from the root of the project, from a terminal:
+
+| Command | Action |
+| :-------------------- | :------------------------------------------------- |
+| `npm install` | Installs dependencies |
+| `npm run dev` | Starts local dev server at `127.0.0.1:5173/` |
+| `npm run build` | Build your production site to `./dist/` |
+| `npm run preview` | Preview your build locally, before deploying |
+| `npm run fmt` | Format codes with Prettier |
+| `npm run lint` | Run Eslint |
+| `npm run qwik ...` | Run CLI commands like `qwik add`, `qwik build` |
+
+
+
+### Configuration
+
+Basic configuration file: `./src/config.mjs`
+
+```javascript
+export const SITE = {
+ name: 'Example',
+
+ origin: 'https://example.com',
+ basePathname: '/', // Change this if you need to deploy to Github Pages, for example
+ trailingSlash: true, // Generate permalinks with or without "/" at the end
+};
+```
+
+
+
+### Deploy
+
+#### Deploy to production (manual)
+
+You can create an optimized production build with:
+
+```shell
+npm run build
+```
+
+Now, your website is ready to be deployed. All generated files are located at
+`dist` folder, which you can deploy the folder to any hosting service you
+prefer.
+
+#### Deploy to Netlify
+
+Clone this repository on own GitHub account and deploy to Netlify:
+
+[](https://app.netlify.com/start/deploy?repository=https://github.com/onwidget/qwind)
+
+#### Deploy to Vercel
+
+Clone this repository on own GitHub account and deploy to Vercel:
+
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fonwidget%2Fqwind)
+
+
+
+## Roadmap
+
+### Base
+- [ ] Create utilities to generate permalinks tailored to the domain and base pathname.
+- [ ] Simplify the way to optimize images.
+- [ ] Create component to make SEO simpler and more intuitive.
+- [ ] Create configurable blog with categories, tags and authors using MDX.
+- [ ] Add more frequently used pages (Portfolio, Services, Contact, Docs ...).
+- [ ] Find or create a library to have more icon sources available.
+- [ ] Refactor some code that doesn't follow Qwik conventions yet.
+
+### Advanced
+
+- [ ] Achieve perfect 100% Google Page Speed score.
+- [ ] Insert complex javascript example widget on home page to demonstrate Qwik features.
+- [ ] Create small illustrative admin backend.
+
+
+
+## Contributing
+
+If you have any idea, suggestions or find any bugs, feel free to open a discussion, an issue or create a pull request.
+That would be very useful for all of us and we would be happy to listen and take action.
+
+## Acknowledgements
+
+Initially created by [onWidget](https://onwidget.com) and maintained by a community of [contributors](https://github.com/onwidget/qwind/graphs/contributors).
+
+## License
+
+**Qwind** is licensed under the MIT license β see the [LICENSE](https://github.com/onwidget/qwind/blob/main/LICENSE.md) file for details.
+
+## Cloudflare Pages
+
+Cloudflare's [wrangler](https://github.com/cloudflare/wrangler) CLI can be used to preview a production build locally. To start a local server, run:
+
+```
+npm run serve
+```
+
+Then visit [http://localhost:8787/](http://localhost:8787/)
+
+### Deployments
+
+[Cloudflare Pages](https://pages.cloudflare.com/) are deployable through their [Git provider integrations](https://developers.cloudflare.com/pages/platform/git-integration/).
+
+If you don't already have an account, then [create a Cloudflare account here](https://dash.cloudflare.com/sign-up/pages). Next go to your dashboard and follow the [Cloudflare Pages deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-anything/).
+
+Within the projects "Settings" for "Build and deployments", the "Build command" should be `npm run build`, and the "Build output directory" should be set to `dist`.
+
+### Function Invocation Routes
+
+Cloudflare Page's [function-invocation-routes config](https://developers.cloudflare.com/pages/platform/functions/function-invocation-routes/) can be used to include, or exclude, certain paths to be used by the worker functions. Having a `_routes.json` file gives developers more granular control over when your Function is invoked.
+This is useful to determine if a page response should be Server-Side Rendered (SSR) or if the response should use a static-site generated (SSG) `index.html` file.
+
+By default, the Cloudflare pages adaptor _does not_ include a `public/_routes.json` config, but rather it is auto-generated from the build by the Cloudflare adaptor. An example of an auto-generate `dist/_routes.json` would be:
+
+```
+{
+ "include": [
+ "/*"
+ ],
+ "exclude": [
+ "/_headers",
+ "/_redirects",
+ "/build/*",
+ "/favicon.ico",
+ "/manifest.json",
+ "/service-worker.js",
+ "/about"
+ ],
+ "version": 1
+}
+```
+
+In the above example, it's saying _all_ pages should be SSR'd. However, the root static files such as `/favicon.ico` and any static assets in `/build/*` should be excluded from the Functions, and instead treated as a static file.
+
+In most cases the generated `dist/_routes.json` file is ideal. However, if you need more granular control over each path, you can instead provide you're own `public/_routes.json` file. When the project provides its own `public/_routes.json` file, then the Cloudflare adaptor will not auto-generate the routes config and instead use the committed one within the `public` directory.
diff --git a/packages/docs/adaptors/cloudflare-pages/vite.config.ts b/packages/docs/adaptors/cloudflare-pages/vite.config.ts
new file mode 100644
index 0000000..dc2bfde
--- /dev/null
+++ b/packages/docs/adaptors/cloudflare-pages/vite.config.ts
@@ -0,0 +1,19 @@
+import { cloudflarePagesAdaptor } from '@builder.io/qwik-city/adaptors/cloudflare-pages/vite'
+import { extendConfig } from '@builder.io/qwik-city/vite'
+import baseConfig from '../../vite.config'
+
+export default extendConfig(baseConfig, () => {
+ return {
+ build: {
+ ssr: true,
+ rollupOptions: {
+ input: ['src/entry.cloudflare-pages.tsx', '@qwik-city-plan'],
+ },
+ },
+ plugins: [
+ cloudflarePagesAdaptor({
+ staticGenerate: true,
+ }),
+ ],
+ }
+})
diff --git a/packages/docs/adaptors/static/vite.config.ts b/packages/docs/adaptors/static/vite.config.ts
new file mode 100644
index 0000000..eeefc30
--- /dev/null
+++ b/packages/docs/adaptors/static/vite.config.ts
@@ -0,0 +1,21 @@
+import { staticAdaptor } from '@builder.io/qwik-city/adaptors/static/vite'
+import { extendConfig } from '@builder.io/qwik-city/vite'
+import baseConfig from '../../vite.config'
+
+import { SITE } from '../../src/config.mjs'
+
+export default extendConfig(baseConfig, () => {
+ return {
+ build: {
+ ssr: true,
+ rollupOptions: {
+ input: ['@qwik-city-plan'],
+ },
+ },
+ plugins: [
+ staticAdaptor({
+ origin: SITE.origin,
+ }),
+ ],
+ }
+})
diff --git a/packages/docs/functions/[[path]].ts b/packages/docs/functions/[[path]].ts
new file mode 100644
index 0000000..ce9a129
--- /dev/null
+++ b/packages/docs/functions/[[path]].ts
@@ -0,0 +1,5 @@
+// @ts-ignore
+
+// Cloudflare Pages Functions
+// https://developers.cloudflare.com/pages/platform/functions/
+export { onRequest } from '../server/entry.cloudflare-pages'
diff --git a/packages/docs/netlify.toml b/packages/docs/netlify.toml
new file mode 100644
index 0000000..9324f51
--- /dev/null
+++ b/packages/docs/netlify.toml
@@ -0,0 +1,7 @@
+[build]
+ publish = "dist"
+ command = "npm run build"
+[[headers]]
+ for = "/build/*"
+ [headers.values]
+ Cache-Control = "public, max-age=31536000, immutable"
\ No newline at end of file
diff --git a/packages/docs/package.json b/packages/docs/package.json
new file mode 100644
index 0000000..cdb8f7e
--- /dev/null
+++ b/packages/docs/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "qwind",
+ "description": "A template to make your website using Qwik + Tailwind CSS.",
+ "version": "0.1.1",
+ "private": true,
+ "scripts": {
+ "build": "qwik build && npm run subfont",
+ "build.client": "vite build",
+ "build.preview": "vite build --ssr src/entry.preview.tsx",
+ "build.server": "vite build -c adaptors/cloudflare-pages/vite.config.ts",
+ "build.types": "tsc --incremental --noEmit",
+ "deploy": "wrangler pages dev ./dist",
+ "dev": "vite --mode ssr",
+ "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force",
+ "fmt": "prettier --write .",
+ "fmt.check": "prettier --check .",
+ "lint": "eslint \"src/**/*.ts*\"",
+ "preview": "qwik build preview && vite preview --open",
+ "start": "vite --open --mode ssr",
+ "subfont": "subfont -i --inline-css --no-fallbacks --silent --root dist",
+ "qwik": "qwik"
+ },
+ "devDependencies": {
+ "@builder.io/qwik": "0.15.0",
+ "@builder.io/qwik-city": "0.0.128",
+ "@fontsource/inter": "^4.5.14",
+ "@iconify-json/tabler": "^1.1.49",
+ "@types/eslint": "8.4.10",
+ "@types/node": "latest",
+ "@typescript-eslint/eslint-plugin": "5.45.0",
+ "@typescript-eslint/parser": "5.45.0",
+ "autoprefixer": "10.4.13",
+ "eslint": "8.29.0",
+ "eslint-plugin-qwik": "0.15.0",
+ "imagetools-core": "^3.2.3",
+ "node-fetch": "3.3.0",
+ "postcss": "^8.4.19",
+ "prettier": "2.8.0",
+ "rehype-autolink-headings": "^6.1.1",
+ "subfont": "^6.12.2",
+ "tailwindcss": "^3.1.8",
+ "typescript": "4.8.4",
+ "vite": "3.2.4",
+ "vite-imagetools": "^4.0.11",
+ "vite-tsconfig-paths": "3.6.0",
+ "wrangler": "latest"
+ },
+ "engines": {
+ "node": ">=15.0.0"
+ }
+}
diff --git a/packages/docs/postcss.config.js b/packages/docs/postcss.config.js
new file mode 100644
index 0000000..fef1b22
--- /dev/null
+++ b/packages/docs/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/packages/docs/public/_headers b/packages/docs/public/_headers
new file mode 100644
index 0000000..0690cb4
--- /dev/null
+++ b/packages/docs/public/_headers
@@ -0,0 +1,4 @@
+# https://developers.cloudflare.com/pages/platform/headers/
+
+/build/*
+ Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable
diff --git a/packages/docs/public/_redirects b/packages/docs/public/_redirects
new file mode 100644
index 0000000..e274610
--- /dev/null
+++ b/packages/docs/public/_redirects
@@ -0,0 +1 @@
+# https://developers.cloudflare.com/pages/platform/redirects/
diff --git a/packages/docs/public/favicon.svg b/packages/docs/public/favicon.svg
new file mode 100644
index 0000000..0ded7c1
--- /dev/null
+++ b/packages/docs/public/favicon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/docs/public/manifest.json b/packages/docs/public/manifest.json
new file mode 100644
index 0000000..44825fa
--- /dev/null
+++ b/packages/docs/public/manifest.json
@@ -0,0 +1,9 @@
+{
+ "$schema": "https://json.schemastore.org/web-manifest-combined.json",
+ "name": "qwik-project-name",
+ "short_name": "Welcome to Qwik",
+ "start_url": ".",
+ "display": "standalone",
+ "background_color": "#fff",
+ "description": "A Qwik project app."
+}
diff --git a/packages/docs/public/robots.txt b/packages/docs/public/robots.txt
new file mode 100644
index 0000000..e69de29
diff --git a/packages/docs/sandbox.config.json b/packages/docs/sandbox.config.json
new file mode 100644
index 0000000..a8b5f3e
--- /dev/null
+++ b/packages/docs/sandbox.config.json
@@ -0,0 +1,11 @@
+{
+ "infiniteLoopProtection": true,
+ "hardReloadOnChange": false,
+ "view": "browser",
+ "template": "node",
+ "container": {
+ "port": 5173,
+ "startScript": "start",
+ "node": "16"
+ }
+}
diff --git a/packages/docs/screenshot.jpg b/packages/docs/screenshot.jpg
new file mode 100644
index 0000000..66b228f
Binary files /dev/null and b/packages/docs/screenshot.jpg differ
diff --git a/packages/docs/src/assets/images/hero.jpg b/packages/docs/src/assets/images/hero.jpg
new file mode 100644
index 0000000..9f88a5e
Binary files /dev/null and b/packages/docs/src/assets/images/hero.jpg differ
diff --git a/packages/docs/src/assets/images/logo.png b/packages/docs/src/assets/images/logo.png
new file mode 100644
index 0000000..6137145
Binary files /dev/null and b/packages/docs/src/assets/images/logo.png differ
diff --git a/packages/docs/src/assets/styles/global.css b/packages/docs/src/assets/styles/global.css
new file mode 100644
index 0000000..da1e370
--- /dev/null
+++ b/packages/docs/src/assets/styles/global.css
@@ -0,0 +1,40 @@
+/**
+ * WHAT IS THIS FILE?
+ *
+ * Globally applied styles. No matter which components are in the page or matching route,
+ * the styles in here will be applied to the Document, without any sort of CSS scoping.
+ *
+ */
+
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer components {
+ .btn {
+ @apply inline-flex items-center justify-center rounded-md shadow-md border-gray-400 border bg-transparent font-medium text-center text-base text-gray-700 leading-snug transition py-3 px-6 md:px-8 ease-in duration-200 focus:ring-blue-500 focus:ring-offset-blue-200 focus:ring-2 focus:ring-offset-2 hover:bg-gray-100 hover:border-gray-600 dark:text-slate-300 dark:border-slate-500 dark:hover:bg-slate-800 dark:hover:border-slate-800;
+ }
+
+ .btn-ghost {
+ @apply border-none shadow-none text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white;
+ }
+
+ .btn-primary {
+ @apply font-semibold bg-primary-600 text-white border-primary-600 hover:bg-primary-800 hover:border-primary-800 hover:text-white dark:text-white dark:bg-primary-700 dark:border-primary-700 dark:hover:border-primary-900 dark:hover:bg-primary-900;
+ }
+
+ [data-aw-toggle-menu] path {
+ @apply transition;
+ }
+ [data-aw-toggle-menu].expanded g > path:first-child {
+ @apply -rotate-45 translate-y-[15px] translate-x-[-3px];
+ }
+
+ [data-aw-toggle-menu].expanded g > path:last-child {
+ @apply rotate-45 translate-y-[-8px] translate-x-[14px];
+ }
+}
+
+.dropdown:hover .dropdown-menu {
+ display: block;
+}
diff --git a/packages/docs/src/components/atoms/Logo.tsx b/packages/docs/src/components/atoms/Logo.tsx
new file mode 100644
index 0000000..bd310f5
--- /dev/null
+++ b/packages/docs/src/components/atoms/Logo.tsx
@@ -0,0 +1,18 @@
+import { component$ } from '@builder.io/qwik'
+
+// @ts-ignore
+import logoSrc from '~/assets/images/logo.png?width=64&height=64&png'
+
+export default component$(() => (
+
+
+ Qwind
+
+))
diff --git a/packages/docs/src/components/core/DarkThemeLauncher.tsx b/packages/docs/src/components/core/DarkThemeLauncher.tsx
new file mode 100644
index 0000000..5bc512f
--- /dev/null
+++ b/packages/docs/src/components/core/DarkThemeLauncher.tsx
@@ -0,0 +1,3 @@
+export const DarkThemeLauncher = () => (
+
+)
diff --git a/packages/docs/src/components/core/RouterHead.tsx b/packages/docs/src/components/core/RouterHead.tsx
new file mode 100644
index 0000000..3a3e0b4
--- /dev/null
+++ b/packages/docs/src/components/core/RouterHead.tsx
@@ -0,0 +1,35 @@
+import { component$ } from '@builder.io/qwik'
+import { useDocumentHead, useLocation } from '@builder.io/qwik-city'
+
+/**
+ * The RouterHead component is placed inside of the document `
+
+ )
+})
diff --git a/packages/docs/src/components/widgets/FAQs.tsx b/packages/docs/src/components/widgets/FAQs.tsx
new file mode 100644
index 0000000..6377cb1
--- /dev/null
+++ b/packages/docs/src/components/widgets/FAQs.tsx
@@ -0,0 +1,84 @@
+import { component$ } from '@builder.io/qwik'
+import { IconArrowDownRight } from '../icons/IconArrowDownRight'
+
+export default component$(() => {
+ const items = [
+ [
+ {
+ question: 'What do I need to start?',
+ answer: `Space, the final frontier. These are the voyages of the Starship Enterprise. Its five-year mission: to explore strange new worlds.
+
+ Many say exploration is part of our destiny, but itβs actually our duty to future generations.`,
+ },
+ {
+ question: 'How to install the Qwik + Tailwind CSS template?',
+ answer: `Well, the way they make shows is, they make one show. That show's called a pilot.
+
+ Then they show that show to the people who make shows, and on the strength of that one show they decide if they're going to make more shows. Some pilots get picked and become television programs. Some don't, become nothing. She starred in one of the ones that became nothing.`,
+ },
+ {
+ question:
+ "What's something that you completely don't understand?",
+ answer: `A flower in my garden, a mystery in my panties. Heart attack never stopped old Big Bear. I didn't even know we were calling him Big Bear.`,
+ },
+ ],
+ [
+ {
+ question: "What's an example of when you changed your mind?",
+ answer: `Michael Knight a young loner on a crusade to champion the cause of the innocent. The helpless. The powerless in a world of criminals who operate above the law. Here he comes Here comes Speed Racer. He's a demon on wheels.`,
+ },
+ {
+ question:
+ 'What is something that you would really like to try again?',
+ answer: `A business big enough that it could be listed on the NASDAQ goes belly up. Disappears!
+
+ It ceases to exist without me. No, you clearly don't know who you're talking to, so let me clue you in.`,
+ },
+ {
+ question:
+ 'If you could only ask one question to each person you meet, what would that question be?',
+ answer: `This is not about revenge. This is about justice. A lot of things can change in twelve years, Admiral. Well, that's certainly good to know. About four years. I got tired of hearing how young I looked.`,
+ },
+ ],
+ ]
+
+ return (
+
+
+
+ Qwind
+ {' '}
+ is a production ready template to start your
+ new website using Qwik +{' '}
+ Tailwind CSS. It has been designed
+ following Best Practices, SEO,
+ Accessibility,{' '}
+ ...
+
+ Dark Mode, Great Page Speed, image
+ optimization, sitemap generation and
+ more.
+
+
+ )
+})
diff --git a/packages/docs/src/config.mjs b/packages/docs/src/config.mjs
new file mode 100644
index 0000000..4342570
--- /dev/null
+++ b/packages/docs/src/config.mjs
@@ -0,0 +1,7 @@
+export const SITE = {
+ name: "Qwind",
+
+ origin: "https://qwind.pages.dev",
+ basePathname: "/",
+ trailingSlash: true
+};
diff --git a/packages/docs/src/entry.cloudflare-pages.tsx b/packages/docs/src/entry.cloudflare-pages.tsx
new file mode 100644
index 0000000..3dd51a4
--- /dev/null
+++ b/packages/docs/src/entry.cloudflare-pages.tsx
@@ -0,0 +1,16 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * It's the entry point for cloudflare-pages when building for production.
+ *
+ * Learn more about the cloudflare integration here:
+ * - https://qwik.builder.io/qwikcity/adaptors/cloudflare-pages/
+ *
+ */
+import { createQwikCity } from '@builder.io/qwik-city/middleware/cloudflare-pages'
+import qwikCityPlan from '@qwik-city-plan'
+import render from './entry.ssr'
+
+const onRequest = createQwikCity({ render, qwikCityPlan })
+
+export { onRequest }
diff --git a/packages/docs/src/entry.dev.tsx b/packages/docs/src/entry.dev.tsx
new file mode 100644
index 0000000..93aa628
--- /dev/null
+++ b/packages/docs/src/entry.dev.tsx
@@ -0,0 +1,17 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * Development entry point using only client-side modules:
+ * - Do not use this mode in production!
+ * - No SSR
+ * - No portion of the application is pre-rendered on the server.
+ * - All of the application is running eagerly in the browser.
+ * - More code is transferred to the browser than in SSR mode.
+ * - Optimizer/Serialization/Deserialization code is not exercised!
+ */
+import { render, RenderOptions } from '@builder.io/qwik'
+import Root from './root'
+
+export default function (opts: RenderOptions) {
+ return render(document, , opts)
+}
diff --git a/packages/docs/src/entry.preview.tsx b/packages/docs/src/entry.preview.tsx
new file mode 100644
index 0000000..2a9c613
--- /dev/null
+++ b/packages/docs/src/entry.preview.tsx
@@ -0,0 +1,20 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * It's the bundle entry point for `npm run preview`.
+ * That is, serving your app built in production mode.
+ *
+ * Feel free to modify this file, but don't remove it!
+ *
+ * Learn more about Vite's preview command:
+ * - https://vitejs.dev/config/preview-options.html#preview-options
+ *
+ */
+import { createQwikCity } from '@builder.io/qwik-city/middleware/node'
+import render from './entry.ssr'
+import qwikCityPlan from '@qwik-city-plan'
+
+/**
+ * The default export is the QwikCity adaptor used by Vite preview.
+ */
+export default createQwikCity({ render, qwikCityPlan })
diff --git a/packages/docs/src/entry.ssr.tsx b/packages/docs/src/entry.ssr.tsx
new file mode 100644
index 0000000..3eac0ab
--- /dev/null
+++ b/packages/docs/src/entry.ssr.tsx
@@ -0,0 +1,29 @@
+/**
+ * WHAT IS THIS FILE?
+ *
+ * SSR entry point, in all cases the application is render outside the browser, this
+ * entry point will be the common one.
+ *
+ * - Server (express, cloudflare...)
+ * - npm run start
+ * - npm run preview
+ * - npm run build
+ *
+ */
+import { renderToStream, RenderToStreamOptions } from '@builder.io/qwik/server'
+import { manifest } from '@qwik-client-manifest'
+import Root from './root'
+
+export default function (opts: RenderToStreamOptions) {
+ return renderToStream(, {
+ manifest,
+ ...opts,
+ // Use container attributes to set attributes on the html tag.
+ containerAttributes: {
+ lang: 'en',
+ dir: 'ltr',
+ class: 'motion-safe:scroll-smooth 2xl:text-[20px]',
+ ...opts.containerAttributes,
+ },
+ })
+}
diff --git a/packages/docs/src/root.tsx b/packages/docs/src/root.tsx
new file mode 100644
index 0000000..bbaf423
--- /dev/null
+++ b/packages/docs/src/root.tsx
@@ -0,0 +1,45 @@
+import { component$, useStyles$ } from '@builder.io/qwik'
+import {
+ QwikCityProvider,
+ RouterOutlet,
+ ServiceWorkerRegister,
+} from '@builder.io/qwik-city'
+
+import { RouterHead } from '~/components/core/RouterHead'
+import { DarkThemeLauncher } from '~/components/core/DarkThemeLauncher'
+
+import globalStyles from '~/assets/styles/global.css?inline'
+
+export default component$(() => {
+ /**
+ * The root of a QwikCity site always start with the component,
+ * immediately followed by the document's and .
+ *
+ * Dont remove the `` and `` elements.
+ */
+
+ useStyles$(globalStyles)
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+})
diff --git a/packages/docs/src/routes/blog/index.tsx b/packages/docs/src/routes/blog/index.tsx
new file mode 100644
index 0000000..c912e31
--- /dev/null
+++ b/packages/docs/src/routes/blog/index.tsx
@@ -0,0 +1,27 @@
+import { component$ } from '@builder.io/qwik'
+import type { DocumentHead } from '@builder.io/qwik-city'
+
+export default component$(() => {
+ return (
+ <>
+
+
+
+ Blog
+
+
Coming soon ...
+
+
+ >
+ )
+})
+
+export const head: DocumentHead = {
+ title: 'Blog β Qwind',
+ meta: [
+ {
+ name: 'description',
+ content: 'Lorem ipsum lorem ...',
+ },
+ ],
+}
diff --git a/packages/docs/src/routes/docs/index.mdx b/packages/docs/src/routes/docs/index.mdx
new file mode 100644
index 0000000..ec45f3a
--- /dev/null
+++ b/packages/docs/src/routes/docs/index.mdx
@@ -0,0 +1,11 @@
+# Titulo
+
+Below is an example of markdown in JSX.
+
+```js
+const a = hola
+```
+
+
+ Try and change the background color to `tomato`.
+
+
+
+
+ >
+ )
+})
+
+export const head: DocumentHead = {
+ title: 'Qwind β Free template for starts a website using Qwik + Tailwind CSS',
+ meta: [
+ {
+ name: 'description',
+ content:
+ 'Qwind is a free and ready to start template to make your website using Qwik and Tailwind CSS.',
+ },
+ ],
+}
diff --git a/packages/docs/src/routes/docs/menu.md b/packages/docs/src/routes/docs/menu.md
new file mode 100644
index 0000000..97a56cf
--- /dev/null
+++ b/packages/docs/src/routes/docs/menu.md
@@ -0,0 +1,13 @@
+# Guide
+
+## Guides
+
+- [Overview](overview/index.mdx)
+
+
+
+## Community
+
+- [GitHub](https://github.com/BuilderIO/qwik)
+- [@QwikDev](https://twitter.com/QwikDev)
+- [Discord](https://qwik.builder.io/chat)
diff --git a/packages/docs/src/routes/docs/overview/index.mdx b/packages/docs/src/routes/docs/overview/index.mdx
new file mode 100644
index 0000000..79830ff
--- /dev/null
+++ b/packages/docs/src/routes/docs/overview/index.mdx
@@ -0,0 +1,65 @@
+---
+title: Overview
+contributors:
+ - adamdbradley
+ - steve8708
+ - manucorporat
+ - gabrielgrant
+---
+
+# Welcome to Qwik
+
+Qwik is a new kind of web framework that can deliver instant loading web applications at any size or complexity. Your sites and apps can boot with about 1kb of JS (regardless of application complexity), and achieve consistent performance at scale.
+
+[See more presentations, videos, and podcasts](/media/)
+
+[Check out sites built with Qwik](/showcase/)
+
+## Getting Started with Qwik
+
+
Qwik can be used to build any type of web site or application
+
+
+
Instant-on
+
+ Unlike other frameworks, Qwik is resumable which means Qwik
+ applications require 0 hydration. This allows Qwik apps to have
+ instant-on interactivity, regardless of size or complexity
+
+
+
+
Optimized for speed
+
+ Qwik has unprecedented performance, offering sub-second full page
+ loads even on mobile devices. Qwik achieves this by delivering pure
+ HTML, and incrementally loading JS only as-needed.
+
+
+
diff --git a/packages/docs/src/routes/index.tsx b/packages/docs/src/routes/index.tsx
new file mode 100644
index 0000000..5cf1ba9
--- /dev/null
+++ b/packages/docs/src/routes/index.tsx
@@ -0,0 +1,31 @@
+import { component$ } from '@builder.io/qwik'
+import type { DocumentHead } from '@builder.io/qwik-city'
+
+import Hero from '~/components/widgets/Hero'
+import Features from '~/components/widgets/Features'
+import FAQs from '~/components/widgets/FAQs'
+import Stats from '~/components/widgets/Stats'
+import CallToAction from '~/components/widgets/CallToAction'
+
+export default component$(() => {
+ return (
+ <>
+
+
+
+
+
+ >
+ )
+})
+
+export const head: DocumentHead = {
+ title: 'Qwind β Free template for starts a website using Qwik + Tailwind CSS',
+ meta: [
+ {
+ name: 'description',
+ content:
+ 'Qwind is a free and ready to start template to make your website using Qwik and Tailwind CSS.',
+ },
+ ],
+}
diff --git a/packages/docs/src/routes/layout.tsx b/packages/docs/src/routes/layout.tsx
new file mode 100644
index 0000000..f206ddb
--- /dev/null
+++ b/packages/docs/src/routes/layout.tsx
@@ -0,0 +1,28 @@
+import { component$, Slot } from '@builder.io/qwik'
+
+import Footer from '~/components/widgets/Footer'
+import Header from '~/components/widgets/Header'
+
+export default component$(() => {
+ // useClientEffect$(() => {
+ // if (
+ // localStorage.theme === "dark" ||
+ // (!("theme" in localStorage) &&
+ // window.matchMedia("(prefers-color-scheme: dark)").matches)
+ // ) {
+ // document.documentElement.classList.add("dark");
+ // } else {
+ // document.documentElement.classList.remove("dark");
+ // }
+ // });
+
+ return (
+ <>
+
+
+
+
+
+ >
+ )
+})
diff --git a/packages/docs/src/routes/service-worker.ts b/packages/docs/src/routes/service-worker.ts
new file mode 100644
index 0000000..61fde0e
--- /dev/null
+++ b/packages/docs/src/routes/service-worker.ts
@@ -0,0 +1,18 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * The service-worker.ts file is used to have state of the art prefetching.
+ * https://qwik.builder.io/qwikcity/prefetching/overview/
+ *
+ * Qwik uses a service worker to speed up your site and reduce latency, ie, not used in the traditional way of offline.
+ * You can also use this file to add more functionality that runs in the service worker.
+ */
+import { setupServiceWorker } from '@builder.io/qwik-city/service-worker'
+
+setupServiceWorker()
+
+addEventListener('install', () => self.skipWaiting())
+
+addEventListener('activate', () => self.clients.claim())
+
+declare const self: ServiceWorkerGlobalScope
diff --git a/packages/docs/tailwind.config.js b/packages/docs/tailwind.config.js
new file mode 100644
index 0000000..af2d670
--- /dev/null
+++ b/packages/docs/tailwind.config.js
@@ -0,0 +1,21 @@
+/** @type {import('tailwindcss').Config} */
+
+const defaultTheme = require('tailwindcss/defaultTheme')
+const colors = require('tailwindcss/colors')
+
+module.exports = {
+ content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'],
+ theme: {
+ extend: {
+ colors: {
+ primary: colors.purple,
+ secondary: colors.sky,
+ },
+ fontFamily: {
+ sans: ["'Inter'", ...defaultTheme.fontFamily.sans],
+ },
+ },
+ },
+ plugins: [],
+ darkMode: 'class',
+}
diff --git a/packages/docs/tsconfig.json b/packages/docs/tsconfig.json
new file mode 100644
index 0000000..d4ebe51
--- /dev/null
+++ b/packages/docs/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "target": "ES2017",
+ "module": "ES2020",
+ "lib": ["es2020", "DOM", "WebWorker", "DOM.Iterable"],
+ "jsx": "react-jsx",
+ "jsxImportSource": "@builder.io/qwik",
+ "strict": true,
+ "resolveJsonModule": true,
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "incremental": true,
+ "isolatedModules": true,
+ "outDir": "tmp",
+ "noEmit": true,
+ "types": ["node", "vite/client"],
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./src/*"]
+ }
+ },
+ "files": ["./.eslintrc.cjs"],
+ "include": ["src"]
+}
diff --git a/packages/docs/vercel.json b/packages/docs/vercel.json
new file mode 100644
index 0000000..9b49eed
--- /dev/null
+++ b/packages/docs/vercel.json
@@ -0,0 +1,15 @@
+{
+ "cleanUrls": true,
+ "trailingSlash": false,
+ "headers": [
+ {
+ "source": "/build/(.*)",
+ "headers": [
+ {
+ "key": "Cache-Control",
+ "value": "public, max-age=31536000, immutable"
+ }
+ ]
+ }
+ ]
+}
diff --git a/packages/docs/vite.config.ts b/packages/docs/vite.config.ts
new file mode 100644
index 0000000..4facbee
--- /dev/null
+++ b/packages/docs/vite.config.ts
@@ -0,0 +1,37 @@
+import { defineConfig } from 'vite'
+import { qwikVite } from '@builder.io/qwik/optimizer'
+import { qwikCity } from '@builder.io/qwik-city/vite'
+import { imagetools } from 'vite-imagetools'
+import tsconfigPaths from 'vite-tsconfig-paths'
+import { SITE } from './src/config.mjs'
+
+const path = require('path')
+
+export default defineConfig(() => {
+ return {
+ plugins: [
+ qwikCity({
+ basePathname: SITE.basePathname,
+ trailingSlash: SITE.trailingSlash,
+ mdxPlugins: {
+ rehypeSyntaxHighlight: true,
+ rehypeAutolinkHeadings: false,
+ remarkGfm: true,
+ },
+ }),
+ qwikVite(),
+ tsconfigPaths(),
+ imagetools(),
+ ],
+ preview: {
+ headers: {
+ 'Cache-Control': 'public, max-age=600',
+ },
+ },
+ resolve: {
+ alias: {
+ '~': path.resolve(__dirname, './src'),
+ },
+ },
+ }
+})