├── .npmrc
├── src
├── routes
│ ├── +layout.ts
│ ├── +page.svelte
│ ├── +layout.svelte
│ └── +error.svelte
├── lib
│ ├── index.ts
│ └── components
│ │ ├── sections
│ │ ├── Footer.svelte
│ │ ├── Contributing.svelte
│ │ ├── BasicConcepts.svelte
│ │ ├── Hero.svelte
│ │ ├── Testimonials.svelte
│ │ ├── Advantages.svelte
│ │ └── Downloads.svelte
│ │ ├── common
│ │ ├── DualHeader.svelte
│ │ └── LinkCard.svelte
│ │ └── core
│ │ └── Navigation.svelte
├── app.d.ts
├── app.html
├── hooks.server.ts
└── app.css
├── bun.lockb
├── screenshots
└── 20241008.png
├── .prettierignore
├── Dockerfile
├── .vscode
└── settings.json
├── .gitignore
├── compose.yml
├── static
├── icons
│ ├── menu-bars.svg
│ ├── left-arrow.svg
│ ├── right-arrow.svg
│ └── link-arrow.svg
├── logo.svg
└── graphics
│ ├── review-graphic-light.svg
│ ├── review-graphic-dark.svg
│ ├── deck-graphic-dark.svg
│ └── deck-graphic-light.svg
├── .prettierrc
├── Makefile
├── vite.config.ts
├── tsconfig.json
├── README.md
├── svelte.config.js
├── .github
└── workflows
│ ├── check-pr.yml
│ └── deploy.yml
├── eslint.config.js
├── LICENSE
└── package.json
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/src/routes/+layout.ts:
--------------------------------------------------------------------------------
1 | export const prerender = true;
2 |
--------------------------------------------------------------------------------
/bun.lockb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ankitects/anki-landing-page/HEAD/bun.lockb
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | // place files you want to import through the `$lib` alias in this folder.
2 |
--------------------------------------------------------------------------------
/screenshots/20241008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ankitects/anki-landing-page/HEAD/screenshots/20241008.png
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Ignore files for PNPM, NPM and YARN
2 | pnpm-lock.yaml
3 | package-lock.json
4 | yarn.lock
5 | .vscode
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM oven/bun:alpine
2 |
3 | RUN apk add make
4 |
5 | COPY . /anki-landing-page
6 |
7 | WORKDIR /anki-landing-page
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "conventionalCommits.scopes": [
3 | "Build Scripts",
4 | "Grammar",
5 | "Docker",
6 | "Documentation",
7 | "Vite"
8 | ]
9 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 | vite.config.js.timestamp-*
10 | vite.config.ts.timestamp-*
11 |
--------------------------------------------------------------------------------
/src/lib/components/sections/Footer.svelte:
--------------------------------------------------------------------------------
1 |
Redirecting to homepage...
17 |27 | {description} 28 |
29 | 30 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-static'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter({ fallback: '404.html' }), 15 | paths: { 16 | base: process.argv.includes('dev') ? '' : process.env.BASE_PATH, 17 | relative: false, 18 | }, 19 | }, 20 | }; 21 | 22 | export default config; 23 | -------------------------------------------------------------------------------- /.github/workflows/check-pr.yml: -------------------------------------------------------------------------------- 1 | name: Check Pull Request 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build_site: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | 15 | # If you're using pnpm, uncomment the following step and adjust commands accordingly 16 | # - name: Install pnpm 17 | # uses: pnpm/action-setup@v3 18 | # with: 19 | # version: 8 20 | 21 | - name: Install Node.js 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: 20 25 | cache: npm 26 | 27 | - name: Install dependencies 28 | run: npm install 29 | 30 | - name: Run checks 31 | run: npm run lint 32 | 33 | - name: Build 34 | env: 35 | BASE_PATH: '/${{ github.event.repository.name }}' 36 | run: npm run build 37 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js'; 2 | import ts from 'typescript-eslint'; 3 | import svelte from 'eslint-plugin-svelte'; 4 | import prettier from 'eslint-config-prettier'; 5 | import globals from 'globals'; 6 | 7 | /** @type {import('eslint').Linter.FlatConfig[]} */ 8 | export default [ 9 | js.configs.recommended, 10 | ...ts.configs.recommended, 11 | ...svelte.configs['flat/recommended'], 12 | prettier, 13 | ...svelte.configs['flat/prettier'], 14 | { 15 | languageOptions: { 16 | globals: { 17 | ...globals.browser, 18 | ...globals.node, 19 | }, 20 | }, 21 | }, 22 | { 23 | files: ['**/*.svelte'], 24 | languageOptions: { 25 | parserOptions: { 26 | parser: ts.parser, 27 | }, 28 | }, 29 | }, 30 | { 31 | ignores: ['build/', '.svelte-kit/', 'dist/'], 32 | }, 33 | { 34 | rules: { 35 | '@typescript-eslint/no-unused-vars': [ 36 | 'warn', 37 | { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, 38 | ], 39 | 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], 40 | }, 41 | }, 42 | ]; 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Toby Rea 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. 22 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss'; 2 | 3 | @layer base { 4 | :root { 5 | --foreground: 248, 8%, 20%; 6 | --subtle: 0, 1%, 33%; 7 | --background: 0, 0%, 100%; 8 | --primary: 208, 65%, 55%; 9 | --primary-darker: 208, 65%, 52%; 10 | --scrollbar-thumb: var(--subtle); 11 | --scrollbar-track: var(--background); 12 | } 13 | 14 | @media (prefers-color-scheme: dark) { 15 | :root { 16 | --foreground: 0, 0%, 100%; 17 | --subtle: 0, 0%, 85%; 18 | --background: 0, 0%, 3%; 19 | --primary: 205, 67%, 62%; 20 | } 21 | } 22 | 23 | body { 24 | @apply font-sans bg-background text-foreground; 25 | } 26 | } 27 | 28 | @theme { 29 | --font-sans: Hanken Grotesk Variable, sans-serif; 30 | 31 | --color-primary-darker: hsl(var(--primary-darker)); 32 | --color-foreground: hsl(var(--foreground)); 33 | --color-subtle: hsl(var(--subtle)); 34 | --color-background: hsl(var(--background)); 35 | --color-primary: hsl(var(--primary)); 36 | --color-secondary: #968ca8; 37 | --color-neutral: hsla(var(--foreground), 70%); 38 | --color-error: #ff5449; 39 | --color-subtle-surface: hsla(var(--subtle), 8%); 40 | } 41 | 42 | html { 43 | scroll-behavior: smooth; 44 | scrollbar-color: hsla(var(--scrollbar-thumb), 30%) hsl(var(--scrollbar-track)); 45 | } 46 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "anki-landing-page", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 11 | "lint": "prettier --check . && eslint .", 12 | "format": "prettier --write ." 13 | }, 14 | "devDependencies": { 15 | "@sveltejs/adapter-auto": "^3.3.1", 16 | "@sveltejs/adapter-static": "^3.0.6", 17 | "@sveltejs/kit": "^2.8.5", 18 | "@sveltejs/vite-plugin-svelte": "^4.0.2", 19 | "@types/eslint": "^8.56.12", 20 | "eslint": "^9.15.0", 21 | "eslint-config-prettier": "^9.1.0", 22 | "eslint-plugin-svelte": "^2.46.0", 23 | "globals": "^15.12.0", 24 | "prettier": "^3.4.1", 25 | "prettier-plugin-svelte": "^3.3.2", 26 | "svelte": "^5.2.9", 27 | "svelte-check": "^4.1.0", 28 | "tailwindcss": "^4.0.0", 29 | "tslib": "^2.8.1", 30 | "typescript": "^5.7.2", 31 | "typescript-eslint": "^8.16.0", 32 | "vite": "^5.4.11" 33 | }, 34 | "type": "module", 35 | "dependencies": { 36 | "@fontsource-variable/hanken-grotesk": "^5.1.1", 37 | "@tailwindcss/vite": "^4.0.1" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - 'main' 7 | 8 | jobs: 9 | build_site: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | 15 | # If you're using pnpm, uncomment the following step and adjust commands accordingly 16 | # - name: Install pnpm 17 | # uses: pnpm/action-setup@v3 18 | # with: 19 | # version: 8 20 | 21 | - name: Install Node.js 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: 20 25 | cache: npm 26 | 27 | - name: Install dependencies 28 | run: npm install 29 | 30 | - name: Check with Prettier 31 | run: npx prettier --check . 32 | 33 | - name: Build 34 | env: 35 | BASE_PATH: '' 36 | run: npm run build; cp build/index.html build/404.html 37 | 38 | - name: Upload Artifacts 39 | uses: actions/upload-pages-artifact@v3 40 | with: 41 | # This should match the `pages` option in your adapter-static options 42 | path: 'build/' 43 | 44 | deploy: 45 | needs: build_site 46 | runs-on: ubuntu-latest 47 | 48 | permissions: 49 | pages: write 50 | id-token: write 51 | 52 | environment: 53 | name: github-pages 54 | url: ${{ steps.deployment.outputs.page_url }} 55 | 56 | steps: 57 | - name: Deploy 58 | id: deployment 59 | uses: actions/deploy-pages@v4 60 | -------------------------------------------------------------------------------- /src/lib/components/sections/Contributing.svelte: -------------------------------------------------------------------------------- 1 | 32 | 33 |37 | Anki is a community project where anyone can make contributions to help improve everyone's 38 | experience. 39 |
40 | {/snippet} 41 |Anki supports complex workflows, but getting started is easy.
10 | {/snippet} 11 |26 | Decks are groups of flashcards that allow you to study specific parts of your collection 27 | instead of everything all at once. Create a new deck and add some flashcards to get started. 28 |
29 |45 | When you're ready, start reviewing your flashcards. Rate your recall with the most suitable 46 | option and Anki will schedule the next review for when you're most likely to forget the 47 | information. 48 |
49 |34 | Anki is a flashcard program that helps you spend more time on challenging material, and less 35 | on what you already know. 36 |
37 |See what people are saying about Anki.
65 | {/snippet} 66 |{description}
99 |Here are a few reasons why users love Anki.
106 | {/snippet} 107 |18 | Choose the correct download for your platform. For details, see the 23 | installation guide 24 | . 25 |
26 | {/snippet} 27 |35 | The free computer version is available for all major platforms. 36 |
37 |146 | AnkiMobile is the official iOS app and all purchases help fund Anki's development. 147 |
148 |