Skip to content

Commit

Permalink
OSS init <3
Browse files Browse the repository at this point in the history
  • Loading branch information
flowergardn committed Aug 14, 2023
0 parents commit cff22c9
Show file tree
Hide file tree
Showing 60 changed files with 8,434 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Since the ".env" file is gitignored, you can use the ".env.example" file to
# build a new ".env" file when you clone the repo. Keep this file up-to-date
# when you add new variables to `.env`.

# This file will be committed to version control, so make sure not to have any
# secrets in it. If you are cloning this repo, create a copy of this file named
# ".env" and populate it with your secrets.

# When adding additional environment variables, the schema in "/src/env.mjs"
# should be updated accordingly.

# Prisma
# https://www.prisma.io/docs/reference/database-reference/connection-urls#env
DATABASE_URL="file:./db.sqlite"
37 changes: 37 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const path = require("path");

/** @type {import("eslint").Linter.Config} */
const config = {
overrides: [
{
extends: [
"plugin:@typescript-eslint/recommended-requiring-type-checking",
],
files: ["*.ts", "*.tsx"],
parserOptions: {
project: path.join(__dirname, "tsconfig.json"),
},
},
],
parser: "@typescript-eslint/parser",
parserOptions: {
project: path.join(__dirname, "tsconfig.json"),
},
plugins: ["@typescript-eslint"],
extends: ["next/core-web-vitals", "plugin:@typescript-eslint/recommended"],
rules: {
"@typescript-eslint/consistent-type-imports": [
"warn",
{
prefer: "type-imports",
fixStyle: "inline-type-imports",
},
],
"react-hooks/rules-of-hooks": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }],
},
};

module.exports = config;
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: CI

on: [push, pull_request]

env:
DATABASE_URL: "https://fake.com"
TWITCH_ACCESS_TOKEN: "hehe"
TWITCH_CLIENT_ID: "<3"

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Install Dependencies
run: yarn

- name: Typecheck
run: yarn typecheck

- name: Lint
run: yarn lint
48 changes: 48 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# database
/prisma/db.sqlite
/prisma/db.sqlite-journal

# next.js
/.next/
/out/
next-env.d.ts

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# local env files
# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
.env
.env.*
!.env.example

# vercel
.vercel

# typescript
*.tsbuildinfo

.vercel

# Sentry Auth Token
.sentryclirc
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"discord.enabled": true,
"codesnap.shutterAction": "copy"
}
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Everly

[Everly](https://everly.sh) is a whitelabel serverless YouTube and Twitch notification bot, for $10 / lifetime

## Why open source it if it's paid?

Because open source software is awesome. I understand people will be able to host their own instances, and thus will reduce funding towards me, but that's okay. Payment of Everly is purely to support my development efforts, as the costs to actually run it are close to nothing; so nothing is lost due to the cause of this open-source nature.

## Contributing

At this stage, Everly is pretty much finished. There's nothing currently planned, and there's no major bugs. But if you think of anything, feel free to make an issue!

## Tech

Everly is built on the [T3 Stack](https://create.t3.gg/en/introduction#the-t3-stack) which is aimed to allow developers to move as fast as possible.

## License

As of right now, Everly isn't licensed. This means you're not allowed to do anything with the code itself. It's open sourced for contributions and visibility.
60 changes: 60 additions & 0 deletions next.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import {withSentryConfig} from "@sentry/nextjs";
/**
* Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful
* for Docker builds.
*/
await import("./src/env.mjs");

/** @type {import("next").NextConfig} */
const config = {
reactStrictMode: true,

/**
* If you have `experimental: { appDir: true }` set, then you must comment the below `i18n` config
* out.
*
* @see https://github.com/vercel/next.js/issues/41980
*/
i18n: {
locales: ["en"],
defaultLocale: "en",
},
typescript: {
ignoreBuildErrors: true,
},
eslint: {
ignoreDuringBuilds: true,
},
swcMinify: true,
images: {
domains: ["yt3.googleusercontent.com", "static-cdn.jtvnw.net"],
},
};
export default withSentryConfig(config, {
// For all available options, see:
// https://github.com/getsentry/sentry-webpack-plugin#options

// Suppresses source map uploading logs during build
silent: true,

org: "astridx",
project: "everly",
}, {
// For all available options, see:
// https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/

// Upload a larger set of source maps for prettier stack traces (increases build time)
widenClientFileUpload: true,

// Transpiles SDK to be compatible with IE11 (increases bundle size)
transpileClientSDK: true,

// Routes browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers (increases server load)
tunnelRoute: "/monitoring",

// Hides source maps from generated client bundles
hideSourceMaps: true,

// Automatically tree-shake Sentry logger statements to reduce bundle size
disableLogger: true,
});
66 changes: 66 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"name": "everly",
"version": "1.0.0",
"private": true,
"license": "All Rights Reserved",
"scripts": {
"build": "next build",
"dev": "next dev",
"postinstall": "prisma generate",
"lint": "next lint",
"start": "next start",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@clerk/nextjs": "^4.20.0",
"@clerk/themes": "^1.7.4",
"@discordjs/builders": "^1.6.3",
"@prisma/client": "^4.14.0",
"@sentry/nextjs": "^7.54.0",
"@skyra/discord-components-react": "^3.6.0",
"@t3-oss/env-nextjs": "^0.3.1",
"@tailwindcss/typography": "^0.5.9",
"@tanstack/react-query": "^4.29.7",
"@trpc/client": "^10.26.0",
"@trpc/next": "^10.26.0",
"@trpc/react-query": "^10.26.0",
"@trpc/server": "^10.26.0",
"@vercel/analytics": "^1.0.1",
"axios": "^1.4.0",
"daisyui": "^3.0.3",
"dayjs": "^1.11.8",
"discord-api-types": "^0.37.43",
"discord-permission": "^1.0.4",
"micro": "^10.0.1",
"next": "^13.4.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-hook-form": "^7.44.3",
"react-hot-toast": "^2.4.1",
"sharp": "^0.32.1",
"superjson": "1.12.2",
"svix": "^1.4.12",
"zod": "^3.21.4"
},
"devDependencies": {
"@types/eslint": "^8.37.0",
"@types/node": "^18.16.0",
"@types/prettier": "^2.7.2",
"@types/react": "^18.2.6",
"@types/react-dom": "^18.2.4",
"@typescript-eslint/eslint-plugin": "^5.59.6",
"@typescript-eslint/parser": "^5.59.6",
"autoprefixer": "^10.4.14",
"eslint": "^8.40.0",
"eslint-config-next": "^13.4.2",
"postcss": "^8.4.21",
"prettier": "^2.8.8",
"prettier-plugin-tailwindcss": "^0.2.8",
"prisma": "^4.14.0",
"tailwindcss": "^3.3.0",
"typescript": "^5.0.4"
},
"ct3aMetadata": {
"initVersion": "7.13.1"
}
}
8 changes: 8 additions & 0 deletions postcss.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const config = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

module.exports = config;
6 changes: 6 additions & 0 deletions prettier.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/** @type {import("prettier").Config} */
const config = {
plugins: [require.resolve("prettier-plugin-tailwindcss")],
};

module.exports = config;
47 changes: 47 additions & 0 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
generator client {
provider = "prisma-client-js"
previewFeatures = ["jsonProtocol"]
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}

model Example {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

model Announcements {
id String @id @default(cuid())
announced Boolean @default(false)
instanceId String
videoId String
Instance Instance @relation(fields: [instanceId], references: [id])
}

model Instance {
id String @id @default(cuid())
createdAt DateTime @default(now())
type String
name String
automation Boolean @default(true)
botToken String
serverId String
channelId String
accountId String
accountPfp String
managers String
announcementMsg String @db.Text @default("{\"content\": \"%username% just uploaded!\\n%link%\"}")
Announcements Announcements[]
}

model Whitelisted {
discordId String @id
whitelisted Boolean @default(true)
whitelistedAt DateTime @default(now())
}
Binary file added public/Everly.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/Kitty.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon.ico
Binary file not shown.
30 changes: 30 additions & 0 deletions sentry.client.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// This file configures the initialization of Sentry on the client.
// The config you add here will be used whenever a users loads a page in their browser.
// https://docs.sentry.io/platforms/javascript/guides/nextjs/

import * as Sentry from "@sentry/nextjs";

Sentry.init({
dsn: "https://248afdfbb275470badee948cff9ed808@o4504994195439616.ingest.sentry.io/4505347492806656",

// Adjust this value in production, or use tracesSampler for greater control
tracesSampleRate: 1,

// Setting this option to true will print useful information to the console while you're setting up Sentry.
debug: false,

replaysOnErrorSampleRate: 1.0,

// This sets the sample rate to be 10%. You may want this to be 100% while
// in development and sample at a lower rate in production
replaysSessionSampleRate: 0.1,

// You can remove this option if you're not planning to use the Sentry Session Replay feature:
integrations: [
new Sentry.Replay({
// Additional Replay configuration goes in here, for example:
maskAllText: true,
blockAllMedia: true,
}),
],
});
16 changes: 16 additions & 0 deletions sentry.edge.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on).
// The config you add here will be used whenever one of the edge features is loaded.
// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally.
// https://docs.sentry.io/platforms/javascript/guides/nextjs/

import * as Sentry from "@sentry/nextjs";

Sentry.init({
dsn: "https://248afdfbb275470badee948cff9ed808@o4504994195439616.ingest.sentry.io/4505347492806656",

// Adjust this value in production, or use tracesSampler for greater control
tracesSampleRate: 1,

// Setting this option to true will print useful information to the console while you're setting up Sentry.
debug: false,
});
Loading

1 comment on commit cff22c9

@vercel
Copy link

@vercel vercel bot commented on cff22c9 Aug 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.