Skip to content

Latest commit

 

History

History
564 lines (509 loc) · 19.4 KB

GUIDE_AND_TRACKER.md

File metadata and controls

564 lines (509 loc) · 19.4 KB

Pending projects/tasks

Quick links

Tools

Tasks

fetch(
  "https://corsanywhere.herokuapp.com/https://en.wiktionary.org/w/index.php?title=overflow&action=raw",
)
  .then((res) => res.text())
  .then(console.log);

Embed GitHub files/commits/gists into html

Email service (Priority: P0)

This service/lambda will allow me to send email to any users

Features
  • Should include a SQS queue where I will push new messages.
    • Message will include to, from, subject, cc, bcc, message fields.
    • Probably store the above fields in a NoSQL DB table and only add the messageId to the above message?
  • An internal API endpoint to add messages to the email queue
  • A lambda will be connected to the SQS which will send an email based on the message from the queue
    • Perform validation to check if the from field matches my domain .*@vighnesh153\.com. Most of the time, the from field will be no-reply@vighnesh153.com

ReactJS at scale

  • Fundamentals
  • Advanced concepts
    • Patterns
    • Rendering Paradigms
      • SPA
      • SSG
      • ISR
      • SSR
      • Combinations of above
    • Best practices
  • Development Tools
    • Linting
      • Eslint
      • Prettier
    • Git hooks
      • Husky
  • Testing
  • Bootstrapping
    • Create-React-App
    • NextJS
    • Remix
  • Monorepo
  • Deployment
    • Github pages
    • S3 + Cloudfront
    • Vercel
  • Creating a react-js library
  • Micro-frontends with React

Push notifications (Priority: P2)

This will allow me to send push notifications to users

Features
  • Should include a SQS queue where I will push new messages
    • Message will include icon, messageTitle, messageBody, platforms, etc. fields
      • Platforms include Mobile Push notification, Desktop push notification, etc.
    • Probably store the above fields in a NoSQL DB table and only add the messageId to the above message?
  • An internal API endpoint to add messages to the email queue
  • A lambda will be connected to the above SQS which will send the notification

Email bans (Priority: P0)

  • Ban spammers for X number of days (the next ban will be twice the previous one)
  • 5 bans will lead to permanent ban (will need to reach out to me with proper explanation for getting un-banned)

Role based access control on vighnesh153.com (Priority: P0)

Roles have limitations. There will always be a case where we wouldn't want to give 1 permission to a person, but we want to give that permission to some other person. So, this leads to creating an extra role. And again in the future, this issue will occur again which will lead to creation of N number of roles which is basically what groups are meant for. So, instead of relying on roles, I will be creating groups and grant permissions to groups

  • 3 major groups
    • Root (only me)
    • PeopleILike (includes people I love and want to give CRUD permissions to the majority of the projects)
    • Everyone (will mostly have read permissions for almost everything)
  • Access: Access to a resource will be granted based on following criteria
    • To a group
    • To a specific email

Dating ❤️ Compatibility Test 🧪 (Priority: P1)

Tired of breaking up 💔 with your partner over silly reasons 😮‍💨? Try out the dating compatibility test to see if you and your partner 👫 are compatible, before emotionally investing into your relationship 💍.

Features
Admin

TODO

Users
  • Ability to fill out the questionnaire
  • Auto-save the answers
  • Ability to check compatibility with other users
    • Ability to select users from dropdown
  • Ability to invite people to the app (if they haven't signed up)
  • Ability to request permission to view answers of other people
  • Ability to share the app on Whatsapp, Instagram, Facebook, etc

URL shortener/links (Priority: P1)

Why? There are 1000s of url shorteners out there. Well, none of them are made by me 😌

Todos for a new project

  • package.json config
{
  "name": "",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "publishConfig": {
    "access": "public"
  },
  "type": "module",
  "exports": {
    "types": "./dist/main.d.ts",
    "import": "./dist/main.js"
  },
  "types": "./dist/main.d.ts",
  "author": {
    "name": "Vighnesh Raut",
    "email": "me@vighnesh153.dev",
    "url": "https://vighnesh153.dev"
  },
  "license": "MIT",
  "scripts": {
    "build": "rm -rf dist && tsup",
    "dev": "tsup --watch",
    "test:watch": "vitest",
    "test": "vitest run --passWithNoTests"
  },
  "files": ["dist"],
  "dependencies": {
    "@vighnesh153/tools": "npm:@jsr/vighnesh153__tools@^0.1.0"
  },
  "devDependencies": {
    "@types/node": "*",
    "@vighnesh153/tsconfig": "*",
    "@vitest/coverage-v8": "^2.0.5",
    "eslint-config-vighnesh153": "*",
    "tsup": "^8.2.4",
    "typescript": "^5.5.4",
    "vitest": "^2.0.5"
  },
  "keywords": [],
  "repository": {
    "type": "git",
    "url": "git@github.com:vighnesh153/vighnesh153-monorepo.git"
  }
}
  • tsconfig.json
{
  "extends": "@vighnesh153/tsconfig/typescript-library.json",
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    },
    "types": ["vite/client"]
  },
  "include": ["."],
  "exclude": ["dist", "build", "node_modules"]
}
  • .eslintrc.cjs
module.exports = {
  extends: ["vighnesh153/ts-base.eslintrc.cjs"],
  parserOptions: {
    project: "./tsconfig.json",
    tsconfigRootDir: __dirname,
  },
};
  • .eslintignore
*.js
*.cjs
*.d.ts
dist
sst.config.ts
  • vitest.config.ts
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    coverage: {
      provider: "v8",
      thresholds: {
        "100": true,
      },
      include: ["src/**"],
      exclude: ["src/index.ts", "src/**/*.test.ts"],
      reportOnFailure: true,
    },
  },
});
  • README.md

Todos for a new package

  • extends: Todos for a new project
  • tsup.config.ts
import { defineConfig } from "tsup";

export default defineConfig(() => ({
  entry: {
    main: "./src/index.ts",
  },
  splitting: false,
  clean: true,
  minify: true,
  dts: true,
  treeshake: true,
  format: ["esm"],
  outExtension: () => ({ js: `.js` }),
}));

Todos for a new application

  • extends: Todos for a new project