Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
H2M_EMAIL_APP_PASSWORD=""
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,5 @@ dmypy.json

# SQLAlchemy storage
*.db

node_modules/
8 changes: 6 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ reset-db:
create_migration:
@poetry run alembic revision --autogenerate -m "$(MSG)"

.PHONY: run_server
run_server:
.PHONY: server
server:
@uvicorn how2meet.main:app --reload --log-level info --port ${PORT} --host ${HOST}

.PHONY: client
client:
@cd client && yarn dev
6 changes: 6 additions & 0 deletions client/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue}]
charset = utf-8
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
30 changes: 30 additions & 0 deletions client/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
.DS_Store
dist
dist-ssr
coverage
*.local

/cypress/videos/
/cypress/screenshots/

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

*.tsbuildinfo
7 changes: 7 additions & 0 deletions client/.prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"singleQuote": true,
"printWidth": 100
}
39 changes: 39 additions & 0 deletions client/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# vue-h2m

This template should help get you started developing with Vue 3 in Vite.

## Recommended IDE Setup

[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).

## Type Support for `.vue` Imports in TS

TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.

## Customize configuration

See [Vite Configuration Reference](https://vite.dev/config/).

## Project Setup

```sh
yarn
```

### Compile and Hot-Reload for Development

```sh
yarn dev
```

### Type-Check, Compile and Minify for Production

```sh
yarn build
```

### Lint with [ESLint](https://eslint.org/)

```sh
yarn lint
```
1 change: 1 addition & 0 deletions client/env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/// <reference types="vite/client" />
19 changes: 19 additions & 0 deletions client/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import pluginVue from 'eslint-plugin-vue'
import vueTsEslintConfig from '@vue/eslint-config-typescript'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'

export default [
{
name: 'app/files-to-lint',
files: ['**/*.{ts,mts,tsx,vue}'],
},

{
name: 'app/files-to-ignore',
ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
},

...pluginVue.configs['flat/essential'],
...vueTsEslintConfig(),
skipFormatting,
]
14 changes: 14 additions & 0 deletions client/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/src/assets/main.css">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
37 changes: 37 additions & 0 deletions client/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"name": "vue-h2m",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "run-p type-check \"build-only {@}\" --",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --build",
"lint": "eslint . --fix",
"format": "prettier --write src/"
},
"dependencies": {
"@popperjs/core": "^2.11.8",
"bootstrap": "5.3.3",
"vue": "^3.5.13",
"vue-router": "4"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.0",
"@types/node": "^22.9.3",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/eslint-config-prettier": "^10.1.0",
"@vue/eslint-config-typescript": "^14.1.3",
"@vue/tsconfig": "^0.7.0",
"eslint": "^9.14.0",
"eslint-plugin-vue": "^9.30.0",
"npm-run-all2": "^7.0.1",
"prettier": "^3.3.3",
"typescript": "~5.6.3",
"vite": "^6.0.1",
"vite-plugin-vue-devtools": "^7.6.5",
"vue-tsc": "^2.1.10"
}
}
Binary file added client/public/favicon.ico
Binary file not shown.
36 changes: 36 additions & 0 deletions client/src/App.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<script setup lang="ts">
import "bootstrap/dist/css/bootstrap.min.css"
import "bootstrap"
import { ref } from 'vue'

const app_title = "How2Meet"


</script>

<template>
<header>
<h1>{{ app_title }}</h1>
</header>

<nav>
<RouterLink to="/">Go to Home</RouterLink>
<RouterLink to="/about">Go to About</RouterLink>
</nav>

<main>
<RouterView />
</main>

<footer>
</footer>

</template>

<style scoped>
header {
color: #000
}


</style>
14 changes: 14 additions & 0 deletions client/src/assets/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
nav, main {
border: 2px solid #000;
margin-bottom: 10px;
padding: 10px;
}

nav > a + a {
margin-left: 10px;
}

h2 {
border-bottom: 1px solid #ccc;
margin: 0 0 20px;
}
13 changes: 13 additions & 0 deletions client/src/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import "bootstrap/dist/css/bootstrap.min.css";
import "bootstrap";

import router from './router';
import { createApp } from 'vue';
// import { createRouter, createWebHistory } from 'vue-router'

import App from './App.vue';


const app = createApp(App);
app.use(router);
app.mount('#app');
21 changes: 21 additions & 0 deletions client/src/router.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { createRouter, createWebHistory } from 'vue-router'
import home from "@/views/home.vue";
import about from "@/views/about.vue";

const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/',
name: 'home',
component: home
},
{
path: '/about',
name: 'about',
component: about
}
]
});

export default router;
27 changes: 27 additions & 0 deletions client/src/views/about.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<script setup lang="ts">
import { useRouter, useRoute } from 'vue-router'

const view_title = "About"

const router = useRouter()
const route = useRoute()

function goToHome() {
router.push({
name: 'home',
})
}
</script>

<template>
<h2>{{ view_title }}</h2>
<div>Welcome to How2Meet! How2Meet is a frictionless event manager--meaning it is simple, free, easy to use, and does NOT require you or your guests to: Create an account or Download an app
</div>
<button @click="goToHome">Go to Home</button>


</template>

<style scoped>

</style>
26 changes: 26 additions & 0 deletions client/src/views/home.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<script setup lang="ts">
import { useRouter, useRoute } from 'vue-router'

const view_title = "Home"

const router = useRouter()
const route = useRoute()

function goToAbout() {
router.push({
name: 'about',
})
}

</script>

<template>
<h2>{{ view_title }}</h2>
<div>You are home. Be at peace.</div>
<button @click="goToAbout">Go to About</button>

</template>

<style scoped>

</style>
13 changes: 13 additions & 0 deletions client/tsconfig.app.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"composite": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",

"paths": {
"@/*": ["./src/*"]
}
}
}
11 changes: 11 additions & 0 deletions client/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"files": [],
"references": [
{
"path": "./tsconfig.node.json"
},
{
"path": "./tsconfig.app.json"
}
]
}
19 changes: 19 additions & 0 deletions client/tsconfig.node.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"extends": "@tsconfig/node22/tsconfig.json",
"include": [
"vite.config.*",
"vitest.config.*",
"cypress.config.*",
"nightwatch.conf.*",
"playwright.config.*"
],
"compilerOptions": {
"composite": true,
"noEmit": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",

"module": "ESNext",
"moduleResolution": "Bundler",
"types": ["node"]
}
}
18 changes: 18 additions & 0 deletions client/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'

// https://vite.dev/config/
export default defineConfig({
plugins: [
vue(),
vueDevTools(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
},
},
})
Loading