Skip to content

Commit bfce0d1

Browse files
committed
chore: initial commit
feat: complete saas template migration feat: complete SaaS original parity pass feat: prepare saas template publication surface
0 parents  commit bfce0d1

214 files changed

Lines changed: 19571 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
root = true
2+
3+
[*.{js,ts,vue,mjs,json,yml,yaml,md}]
4+
charset = utf-8
5+
end_of_line = lf
6+
insert_final_newline = true
7+
indent_style = space
8+
indent_size = 2
9+
trim_trailing_whitespace = true
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: Bug report
2+
description: Report a reproducible bug
3+
title: "bug: "
4+
labels:
5+
- bug
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
Thank you for reporting a bug.
11+
Please provide enough detail to reproduce the issue.
12+
13+
- type: textarea
14+
id: summary
15+
attributes:
16+
label: Summary
17+
description: What happened?
18+
placeholder: A short description of the bug
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: steps
24+
attributes:
25+
label: Steps to reproduce
26+
description: Include exact commands or actions
27+
placeholder: |
28+
1. Run ...
29+
2. Open ...
30+
3. See error ...
31+
validations:
32+
required: true
33+
34+
- type: textarea
35+
id: expected
36+
attributes:
37+
label: Expected behavior
38+
placeholder: What should happen instead?
39+
validations:
40+
required: true
41+
42+
- type: textarea
43+
id: environment
44+
attributes:
45+
label: Environment
46+
description: OS, Node.js version, pnpm version, browser
47+
placeholder: macOS 14, Node 22, pnpm 10, Chrome 136
48+
validations:
49+
required: true
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Feature request
2+
description: Suggest an improvement for this SaaS template
3+
title: "feat: "
4+
labels:
5+
- enhancement
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
Thanks for the suggestion.
11+
Please describe the problem and the proposed solution.
12+
13+
- type: textarea
14+
id: problem
15+
attributes:
16+
label: Problem statement
17+
description: What problem are you trying to solve?
18+
placeholder: It is difficult to ...
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: proposal
24+
attributes:
25+
label: Proposed solution
26+
description: What should be added or changed?
27+
placeholder: Add ... so users can ...
28+
validations:
29+
required: true
30+
31+
- type: textarea
32+
id: alternatives
33+
attributes:
34+
label: Alternatives considered
35+
description: Any workaround or alternative approach?
36+
37+
- type: textarea
38+
id: context
39+
attributes:
40+
label: Additional context
41+
description: Mockups, links, or examples

.github/pull_request_template.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
## Summary
2+
3+
-
4+
5+
## Changes
6+
7+
-
8+
9+
## Verification
10+
11+
- [ ] `pnpm lint`
12+
- [ ] `pnpm typecheck`
13+
- [ ] `pnpm build`
14+
15+
## Checklist
16+
17+
- [ ] Documentation updated (if needed)
18+
- [ ] No secrets or credentials are included
19+
- [ ] Screenshots added for UI changes (if applicable)

.github/workflows/ci.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: ci
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
ci:
12+
runs-on: ${{ matrix.os }}
13+
14+
strategy:
15+
matrix:
16+
os: [ubuntu-latest]
17+
node: [22]
18+
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v6
22+
23+
- name: Install pnpm
24+
uses: pnpm/action-setup@v6
25+
26+
- name: Install node
27+
uses: actions/setup-node@v6
28+
with:
29+
node-version: ${{ matrix.node }}
30+
cache: pnpm
31+
32+
- name: Install dependencies
33+
run: pnpm install --frozen-lockfile
34+
35+
- name: Lint
36+
run: pnpm run lint
37+
38+
- name: Typecheck
39+
run: pnpm run typecheck
40+
41+
- name: Build
42+
run: pnpm run build

.gitignore

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Nuxt dev/build outputs
2+
.output
3+
.data
4+
.nuxt
5+
.nitro
6+
.cache
7+
dist
8+
9+
# Node dependencies
10+
node_modules
11+
12+
# Logs
13+
logs
14+
*.log
15+
16+
# Misc
17+
.DS_Store
18+
.fleet
19+
.idea
20+
.playwright-cli
21+
22+
# Local env files
23+
.env
24+
.env.*
25+
!.env.example
26+
27+
# tmp
28+
tmp

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 shadcn-nuxt-ui
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Stackhacker UI SaaS Template
2+
3+
[![Stackhacker UI](https://img.shields.io/badge/Made%20with-Stackhacker%20UI-00DC82?logo=nuxt&labelColor=020420)](https://ui.stackhacker.io)
4+
5+
A SaaS template for launching a Nuxt app with a landing page, pricing, documentation, blog, changelog, and auth page UI powered by Stackhacker UI, shadcn-vue, and Tailwind CSS v4.
6+
7+
- [Live demo](https://saas-template.stackhacker.io/)
8+
- [Documentation](https://ui.stackhacker.io/docs/getting-started)
9+
10+
<a href="https://saas-template.stackhacker.io/" target="_blank">
11+
<picture>
12+
<source media="(prefers-color-scheme: dark)" srcset="public/screenshots/saas-dark.png">
13+
<source media="(prefers-color-scheme: light)" srcset="public/screenshots/saas-light.png">
14+
<img alt="Stackhacker UI SaaS Template" src="public/screenshots/saas-light.png" width="830" height="466">
15+
</picture>
16+
</a>
17+
18+
## Quick Start
19+
20+
```bash [Terminal]
21+
pnpm dlx nuxi@latest init my-saas -t gh:stackhacker-ui/saas
22+
```
23+
24+
## Deploy your own
25+
26+
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-name=saas&repository-url=https%3A%2F%2Fgithub.com%2Fstackhacker-ui%2Fsaas&demo-image=https%3A%2F%2Fraw.githubusercontent.com%2Fstackhacker-ui%2Fsaas%2Fmain%2Fpublic%2Fscreenshots%2Fsaas-dark.png&demo-url=https%3A%2F%2Fsaas-template.stackhacker.io%2F&demo-title=Stackhacker%20UI%20SaaS%20Template&demo-description=A%20Nuxt%20SaaS%20template%20with%20landing%2C%20pricing%2C%20docs%2C%20blog%2C%20changelog%2C%20and%20auth%20page%20UI.)
27+
28+
## Setup
29+
30+
Make sure to install the dependencies:
31+
32+
```bash
33+
pnpm install
34+
```
35+
36+
## Development Server
37+
38+
Start the development server on `http://localhost:3000`:
39+
40+
```bash
41+
pnpm dev
42+
```
43+
44+
## Production
45+
46+
Build the application for production:
47+
48+
```bash
49+
pnpm build
50+
```
51+
52+
Locally preview production build:
53+
54+
```bash
55+
pnpm preview
56+
```
57+
58+
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
59+
60+
## Renovate integration
61+
62+
Install [Renovate GitHub app](https://github.com/apps/renovate/installations/select_target) on your repository and you are good to go.

SECURITY.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Security Policy
2+
3+
## Supported Versions
4+
5+
This repository is a SaaS template and is maintained on the `main` branch.
6+
7+
- `main`: supported
8+
9+
## Reporting a Vulnerability
10+
11+
If you discover a security vulnerability, please report it privately.
12+
13+
- Open a private security advisory on GitHub if available for this repository.
14+
- If private advisories are not enabled, contact the maintainers directly and include:
15+
- A clear description of the issue
16+
- Reproduction steps
17+
- Potential impact
18+
- Suggested mitigation (if known)
19+
20+
Please do not open a public issue for vulnerabilities before a fix is available.
21+
22+
## Response Expectations
23+
24+
- We will acknowledge reports as soon as possible.
25+
- We will validate the report and work on a fix.
26+
- We will coordinate disclosure timing with the reporter.

app/app.vue

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<script setup lang="ts">
2+
const colorMode = useColorMode();
3+
const themeColor = computed(() => colorMode.value === "dark" ? "#171717" : "#ffffff");
4+
5+
useHead({
6+
meta: [
7+
{ charset: "utf-8" },
8+
{ name: "viewport", content: "width=device-width, initial-scale=1" },
9+
{ key: "theme-color", name: "theme-color", content: themeColor },
10+
],
11+
link: [
12+
{ rel: "icon", href: "/favicon.ico" },
13+
],
14+
htmlAttrs: { lang: "en" },
15+
});
16+
17+
useSeoMeta({
18+
titleTemplate: "%s - Stackhacker UI SaaS template",
19+
twitterCard: "summary_large_image",
20+
ogImage: "https://ui.stackhacker.io/templates/saas-light.png",
21+
});
22+
23+
const { data: navigation } = await useAsyncData("navigation", () => queryCollectionNavigation("docs"), {
24+
transform: data => data.find(item => item.path === "/docs")?.children || [],
25+
});
26+
const { data: searchSections } = useLazyAsyncData("search", () => queryCollectionSearchSections("docs"), {
27+
server: false,
28+
});
29+
30+
provide("navigation", navigation);
31+
provide("searchSections", searchSections);
32+
</script>
33+
34+
<template>
35+
<div class="min-h-screen bg-background text-foreground antialiased">
36+
<NuxtLoadingIndicator />
37+
<NuxtLayout>
38+
<NuxtPage />
39+
</NuxtLayout>
40+
</div>
41+
</template>

0 commit comments

Comments
 (0)