commit bf40976e40e29f62deb0d5a9c6beb543239322b2 Author: user Date: Thu Oct 30 19:28:30 2025 +0200 oh yeah diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..970c948 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM oven/bun:1.1.38 + +WORKDIR /app + +COPY package.json bun.lockb ./ + +RUN bun install + +COPY . . + +RUN bun run build + +EXPOSE 80 + +CMD ["bun", "run", "start"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e0484ba --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Bill Discount Services + +Deployed to cloudflare pages - via static build + +--- diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000..a215bb0 Binary files /dev/null and b/bun.lockb differ diff --git a/components.json b/components.json new file mode 100644 index 0000000..bbb95e8 --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://next.shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app.css", + "baseColor": "slate" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks" + }, + "typescript": true, + "registry": "https://next.shadcn-svelte.com/registry" +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b5b3b59 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "billdiscountservices", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "start": "bun run ./build/index", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + }, + "devDependencies": { + "@iconify/json": "^2.2.292", + "@sveltejs/adapter-static": "^3.0.9", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "autoprefixer": "^10.4.20", + "bits-ui": "^1.0.0-next.77", + "clsx": "^2.1.1", + "lucide-svelte": "^0.469.0", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.2", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwind-merge": "^2.6.0", + "tailwind-variants": "^0.3.0", + "tailwindcss": "^3.4.9", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.0.0", + "vite": "^5.4.11" + }, + "dependencies": { + "@tailwindcss/container-queries": "^0.1.1", + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", + "unplugin-icons": "^0.22.0" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..ba80730 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..658f9c4 --- /dev/null +++ b/src/app.css @@ -0,0 +1,81 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@font-face { + font-family: "Outfit"; + src: url("/font/outfit-variable.ttf") format("truetype"); +} + +@layer base { + :root { + --background: 142 4% 99%; + --foreground: 142 4% 10%; + --card: 142 4% 99%; + --card-foreground: 142 4% 15%; + --popover: 142 4% 99%; + --popover-foreground: 142 95% 10%; + --primary: 142 76.2% 36.3%; + --primary-foreground: 0 0% 100%; + --secondary: 142 10% 90%; + --secondary-foreground: 0 0% 0%; + --muted: 104 10% 95%; + --muted-foreground: 142 4% 40%; + --accent: 104 10% 90%; + --accent-foreground: 142 4% 15%; + --destructive: 0 50% 50%; + --destructive-foreground: 142 4% 99%; + --border: 142 20% 82%; + --input: 142 20% 50%; + --ring: 142 76.2% 36.3%; + --radius: 0.75rem; + } + .dark { + --background: 142 10% 10%; + --foreground: 142 4% 99%; + --card: 142 4% 10%; + --card-foreground: 142 4% 99%; + --popover: 142 10% 5%; + --popover-foreground: 142 4% 99%; + --primary: 142 76.2% 36.3%; + --primary-foreground: 0 0% 100%; + --secondary: 142 10% 20%; + --secondary-foreground: 0 0% 100%; + --muted: 104 10% 25%; + --muted-foreground: 142 4% 65%; + --accent: 104 10% 25%; + --accent-foreground: 142 4% 95%; + --destructive: 0 50% 50%; + --destructive-foreground: 142 4% 99%; + --border: 142 20% 50%; + --input: 142 20% 50%; + --ring: 142 76.2% 36.3%; + --radius: 0.75rem; + } +} + +@layer base { + * { + @apply border-border; + } + + body { + @apply bg-background text-foreground; + scroll-behavior: smooth; + font-family: + "Outfit", + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + "Helvetica Neue", + Arial, + "Noto Sans", + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + } +} diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..aa88515 --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,15 @@ +import "unplugin-icons/types/svelte"; + +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..ecd5efc --- /dev/null +++ b/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/src/lib/components/atoms/animate-wrapper.svelte b/src/lib/components/atoms/animate-wrapper.svelte new file mode 100644 index 0000000..739cf44 --- /dev/null +++ b/src/lib/components/atoms/animate-wrapper.svelte @@ -0,0 +1,35 @@ + + +
+ {#if visible} +
+ +
+ {/if} +
diff --git a/src/lib/components/atoms/icon.svelte b/src/lib/components/atoms/icon.svelte new file mode 100644 index 0000000..67d9658 --- /dev/null +++ b/src/lib/components/atoms/icon.svelte @@ -0,0 +1,11 @@ + + + diff --git a/src/lib/components/atoms/label-wrapper.svelte b/src/lib/components/atoms/label-wrapper.svelte new file mode 100644 index 0000000..6838a5e --- /dev/null +++ b/src/lib/components/atoms/label-wrapper.svelte @@ -0,0 +1,19 @@ + + +
+ + {@render children?.()} +
diff --git a/src/lib/components/atoms/logo.svelte b/src/lib/components/atoms/logo.svelte new file mode 100644 index 0000000..5e1f1c3 --- /dev/null +++ b/src/lib/components/atoms/logo.svelte @@ -0,0 +1,11 @@ + + +Easy Save Bills diff --git a/src/lib/components/atoms/max-width-wrapper.svelte b/src/lib/components/atoms/max-width-wrapper.svelte new file mode 100644 index 0000000..a2782d7 --- /dev/null +++ b/src/lib/components/atoms/max-width-wrapper.svelte @@ -0,0 +1,11 @@ + + +
+ {@render children()} +
diff --git a/src/lib/components/atoms/title.svelte b/src/lib/components/atoms/title.svelte new file mode 100644 index 0000000..7544f4c --- /dev/null +++ b/src/lib/components/atoms/title.svelte @@ -0,0 +1,64 @@ + + + + {@render children?.()} + diff --git a/src/lib/components/molecules/footer.svelte b/src/lib/components/molecules/footer.svelte new file mode 100644 index 0000000..b32fc7e --- /dev/null +++ b/src/lib/components/molecules/footer.svelte @@ -0,0 +1,46 @@ + + + diff --git a/src/lib/components/molecules/grid-pattern.svelte b/src/lib/components/molecules/grid-pattern.svelte new file mode 100644 index 0000000..1728981 --- /dev/null +++ b/src/lib/components/molecules/grid-pattern.svelte @@ -0,0 +1,49 @@ + + + diff --git a/src/lib/components/molecules/navbar.svelte b/src/lib/components/molecules/navbar.svelte new file mode 100644 index 0000000..93f5876 --- /dev/null +++ b/src/lib/components/molecules/navbar.svelte @@ -0,0 +1,67 @@ + + + diff --git a/src/lib/components/molecules/testimonial-card.svelte b/src/lib/components/molecules/testimonial-card.svelte new file mode 100644 index 0000000..b54b7d8 --- /dev/null +++ b/src/lib/components/molecules/testimonial-card.svelte @@ -0,0 +1,54 @@ + + +
+
+
+ {testimonial.name} + +
+
+ {#each stars as isFilled} + + {/each} +
+

+ {testimonial.name} +

+
+
+ +

+ {testimonial.review} +

+
+
diff --git a/src/lib/components/organisms/about.svelte b/src/lib/components/organisms/about.svelte new file mode 100644 index 0000000..4a5247b --- /dev/null +++ b/src/lib/components/organisms/about.svelte @@ -0,0 +1,152 @@ + + + +
+
+ +
+
+ + About Us + + + + Helping You Save on Your Internet Bills + + + +

+ At {COMPANY_NAME}, we're dedicated to helping you reduce your internet + expenses. Our team of experts works tirelessly to find and secure the + best possible discounts on your internet services. We believe everyone + deserves access to affordable internet without compromising on quality + or speed. +

+
+ +
+
+ +
+
+ Bill Saving Specialists +

+ Our team are experts in negotiating with internet service + providers. We understand the industry inside and out, and we use + this knowledge to secure the best possible rates for our clients. + We've helped thousands of customers significantly reduce their + monthly internet bills. +

+
+
+
+ + +
+
+ +
+
+ Customer-First Approach +

+ We prioritize your needs and budget, working diligently to find + the best internet service deals available in your area. Our + platform makes it easy to compare options and choose the plan that + works best for you, whether you're a casual user or need + high-speed business internet. +

+
+
+
+
+
+ + + +
+
+ + + Our Mission + + + + + + To Make Internet Service Affordable for Everyone + + +
+ +
+
+ +
+ + Best in class + + + Your Partner in Reducing Internet Costs + + +
+
+ +

Proven Savings Record

+
+ +
+ +

Expert Negotiation Skills

+
+
+ +

Personalized Service Plans

+
+
+
+
+ + +

+ At {COMPANY_NAME}, we're committed to making internet services more + affordable for everyone. We understand that internet access is + essential in today's world, and high bills shouldn't stand in the + way. Our mission is to leverage our industry relationships and + negotiation expertise to secure the best possible rates for our + clients. Whether you're a homeowner, renter, or business owner, + we're here to help you save on your internet bills while maintaining + the service quality you need. +

+
+
+
+
+
diff --git a/src/lib/components/organisms/contact.svelte b/src/lib/components/organisms/contact.svelte new file mode 100644 index 0000000..3374664 --- /dev/null +++ b/src/lib/components/organisms/contact.svelte @@ -0,0 +1,127 @@ + + +
+
+
+ Talk with us +

+ Convinced? Want to finally get that discount? Or have any other + question? Contact us and we will get back to you as soon as possible. +

+
+ +
+
+ + + + + + + +
+ + + + + + + + + + + diff --git a/src/lib/core/constants.ts b/src/lib/core/constants.ts new file mode 100644 index 0000000..12b285a --- /dev/null +++ b/src/lib/core/constants.ts @@ -0,0 +1,17 @@ +export const TRANSITION_COLORS = "transition-colors duration-150 ease-in-out"; +export const TRANSITION_ALL = "transition-all duration-150 ease-in-out"; + +export const navLinks = [ + { name: "Home", href: "/#" }, + { name: "About", href: "/#about-us" }, + { name: "Services", href: "/#services" }, + { name: "Contact", href: "/#contact" }, +]; + +export const CONTACT_INFO = { + email: "contact@billdiscountservices.com", + phone: "+1 (844) 392-4558", + address: "1846 E INNOVATION PARK DR STE 100 ORO VALLEY, AZ 85755", +}; + +export const COMPANY_NAME = "Bill Discount Services"; diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..ac680b3 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..58cf554 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,13 @@ + + + + +{@render children()} + +