Skip to content
Merged
Show file tree
Hide file tree
Changes from 37 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
0022f6e
re-scaffold
vincerubinetti Oct 1, 2025
f3f9e26
redo logo and theming
vincerubinetti Oct 3, 2025
983257c
add markdown parsing and styles
vincerubinetti Oct 8, 2025
e0d2a32
add tooltips
vincerubinetti Oct 10, 2025
d9c59a4
add upload
vincerubinetti Oct 13, 2025
6411085
add figure upload
vincerubinetti Oct 14, 2025
34c0809
add drag to reorder figures
vincerubinetti Oct 14, 2025
1e9a79c
add doc name, upload badges
vincerubinetti Oct 15, 2025
37e160c
add example figures
vincerubinetti Oct 15, 2025
052056a
add action buttons and misc
vincerubinetti Oct 16, 2025
6b4e5fd
add ability for multiple examples
vincerubinetti Oct 16, 2025
8b81b77
add basic model hook up and sse
vincerubinetti Oct 16, 2025
61350c8
add text replacement
vincerubinetti Oct 17, 2025
ec8e98d
add figure upload
vincerubinetti Oct 17, 2025
d71d883
re-add appName param
vincerubinetti Oct 17, 2025
f860b3a
add figure upload desc, improve toasts
vincerubinetti Oct 17, 2025
36eff97
add tab system
vincerubinetti Nov 14, 2025
f94bb81
remove selection requirement
vincerubinetti Nov 14, 2025
9989368
change name in frontend, update logo
vincerubinetti Nov 14, 2025
f6ecb42
refactor output and downloads
vincerubinetti Nov 14, 2025
0073024
simplify logo
vincerubinetti Nov 14, 2025
5ae327a
add scrolling and heading ids
vincerubinetti Nov 14, 2025
b59c211
add zip download
vincerubinetti Nov 15, 2025
2a8935f
inline images into html output
vincerubinetti Nov 15, 2025
bb5ea2e
add citation inclusion
vincerubinetti Nov 17, 2025
9711afa
fix bibliography
vincerubinetti Nov 18, 2025
0393a4c
fix fig # color
vincerubinetti Nov 18, 2025
cf544cf
fix fig # pos
vincerubinetti Nov 18, 2025
d455bf5
fix citation bug
vincerubinetti Nov 20, 2025
ad28340
table styles
vincerubinetti Nov 20, 2025
ef2e6c0
fix floating vue iframe click close bug
vincerubinetti Nov 20, 2025
1ed86cf
fix empty citations bug
vincerubinetti Nov 20, 2025
f0980b0
improve citation parsing
vincerubinetti Nov 20, 2025
4bda3e6
improve citation and figure upload requests
vincerubinetti Nov 21, 2025
894d1c4
add citation numbers
vincerubinetti Nov 21, 2025
2bc40d8
rework figure inclusion
vincerubinetti Nov 21, 2025
822f788
Updates pre-commit config, adds pre-commit linting fixes
falquaddoomi Dec 3, 2025
064051d
rename figure on @change instead of @input
vincerubinetti Dec 3, 2025
87f1e78
fix fig names, add fig caps, add paste gap
vincerubinetti Dec 11, 2025
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -199,3 +199,5 @@ withdrarxiv_embeddings.duckdb

# gitignore the model cache directory
model_cache/

.DS_Store
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ repos:
- id: check-yaml
- id: detect-private-key
- repo: https://github.com/tox-dev/pyproject-fmt
rev: "v2.6.0"
rev: "v2.11.1"
hooks:
- id: pyproject-fmt
- repo: https://github.com/citation-file-format/cffconvert
Expand Down Expand Up @@ -39,12 +39,12 @@ repos:
- id: yamllint
exclude: pre-commit-config.yaml
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.13.0"
rev: "v0.14.7"
hooks:
- id: ruff-format
- id: ruff-check
- repo: https://github.com/rhysd/actionlint
rev: v1.7.7
rev: v1.7.9
hooks:
- id: actionlint
- repo: https://gitlab.com/vojko.pribudic.foss/pre-commit-update
Expand Down
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,9 @@ VITE v6.3.5 ready in 1276 ms

### Access the frontend

Use a web browser to open http://localhost:8901 and to view the frontend user interface.
Use a web browser to open http://localhost:5173 and to view the frontend user interface.
It might take a few seconds to establish a connection.

*(FYI: Despite the port being 5173 in the logs, the Docker Compose configuration maps it to port 8901 on the host machine.)*

You'll see two text fields: one on the left for entering manuscript content in Markdown, and one on the right displaying a live preview.

### Draft a manuscript
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.override.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ services:

frontend:
ports:
- "8901:5173"
- "5173:5173"
volumes:
# map the src folder to allow hot reloading
- ./frontend/src/:/app/src/
1 change: 0 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,3 @@ services:
context: ./frontend/
environment:
- "VITE_API=http://localhost:8900"
- "VITE_TITLE=Manugen AI"
3 changes: 3 additions & 0 deletions frontend/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
VITE_TITLE=Manufold
VITE_DESCRIPTION=Write, edit, and refine your manuscript with AI.
VITE_URL=https://manufold.ai
3 changes: 3 additions & 0 deletions frontend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,6 @@ coverage
*.sw?

*.tsbuildinfo


!.env
17 changes: 17 additions & 0 deletions frontend/.prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"plugins": [
"@ianvs/prettier-plugin-sort-imports",
"prettier-plugin-tailwindcss"
],
"importOrder": [
"^vue",
"^@[a-zA-Z]",
"^[a-zA-Z]",
"^@/",
"^/",
"^./",
"^../"
],
"importOrderParserPlugins": ["typescript", "importAssertions"]
}
8 changes: 8 additions & 0 deletions frontend/.vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"recommendations": [
"Vue.volar",
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode"
]
}
1,985 changes: 1,589 additions & 396 deletions frontend/bun.lock

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions frontend/eslint.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import skipFormatting from "@vue/eslint-config-prettier/skip-formatting";
import {
defineConfigWithVueTs,
vueTsConfigs,
} from "@vue/eslint-config-typescript";
import pluginVue from "eslint-plugin-vue";
import { globalIgnores } from "eslint/config";

export default defineConfigWithVueTs(
globalIgnores(["**/dist/**", "**/dist-ssr/**", "**/coverage/**"]),

pluginVue.configs["flat/recommended"],
vueTsConfigs.recommended,
skipFormatting,

{
name: "app/files-to-lint",
files: ["**/*.{ts,mts,tsx,vue}"],
rules: {
"prefer-const": ["error", { destructuring: "all" }],
"vue/no-v-html": "off",
"@typescript-eslint/no-unused-vars": ["error", { caughtErrors: "none" }],
},
},
);
41 changes: 27 additions & 14 deletions frontend/index.html
Original file line number Diff line number Diff line change
@@ -1,27 +1,40 @@
<!DOCTYPE html>
<html lang="">
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- basic -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />

<!-- favicons -->
<link rel="icon" type="image/svg+xml" href="/icon.svg" />

<!-- basic -->
<title>%VITE_TITLE%</title>
<meta name="title" content="%VITE_TITLE%" />
<meta name="description" content="%VITE_DESCRIPTION%" />

<!-- open graph -->
<meta property="og:type" content="website" />
<meta property="og:url" content="%VITE_URL%" />
<meta property="og:title" content="%VITE_TITLE%" />
<meta property="og:description" content="%VITE_DESCRIPTION%" />
<meta property="og:image" content="share.jpg" />

<!-- fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Mulish:ital,wght@0,300..700;1,300..700&display=swap"
href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@200..900&family=Raleway:ital,wght@0,100..900;1,100..900&display=swap"
rel="stylesheet"
/>

<!-- favicon -->
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
</head>

<body>
<div id="app" class="flex flex-col min-h-screen"></div>
<noscript>
Sorry, this website doesn't work without JavaScript enabled.
</noscript>

<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
77 changes: 46 additions & 31 deletions frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,45 +1,60 @@
{
"type": "module",
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"scripts": {
"dev": "vite --open",
"build": "vite build",
"preview": "vite preview",
"type-check": "vue-tsc --build"
"lint": "eslint . --fix",
"format": "prettier --write src/",
"test:types": "vue-tsc --build",
"test:lint": "eslint .",
"test:format": "prettier --check src/",
"test": "bun run test:types && bun run test:lint && bun run test:format"
},
"dependencies": {
"@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.1.8",
"@tiptap/extension-placeholder": "^2.14.0",
"@tiptap/pm": "^2.14.0",
"@tiptap/starter-kit": "^2.14.0",
"@tiptap/vue-3": "^2.14.0",
"@types/poisson-disk-sampling": "^2.2.4",
"@vueuse/core": "^13.3.0",
"@headlessui/vue": "^1.7.23",
"@vueuse/core": "^13.9.0",
"@zip.js/zip.js": "^2.8.10",
"floating-vue": "^5.2.2",
"lodash": "^4.17.21",
"lucide": "^0.514.0",
"lucide-vue-next": "^0.514.0",
"mammoth": "^1.9.1",
"pdfjs-dist": "^5.3.31",
"lucide-vue-next": "^0.544.0",
"mammoth": "^1.11.0",
"micromark": "^4.0.2",
"micromark-extension-gfm-footnote": "^2.1.0",
"micromark-extension-gfm-strikethrough": "^2.1.0",
"micromark-extension-gfm-table": "^2.1.1",
"micromark-extension-math": "^3.1.0",
"pdfjs-dist": "^5.4.149",
"poisson-disk-sampling": "^2.3.1",
"showdown": "^2.1.0",
"sse.js": "^2.6.0",
"tailwindcss": "^4.1.8",
"tiptap-markdown": "^0.8.10",
"vue": "^3.5.13",
"vue-router": "^4.5.0",
"vue-tippy": "^6.7.1",
"vue3-toastify": "^0.2.8"
"sse.js": "^2.7.2",
"vue": "^3.5.22",
"vue-router": "^4.5.1",
"vuedraggable": "^4.1.0"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.1",
"@types/lodash": "^4.17.17",
"@types/node": "^22.14.0",
"@vitejs/plugin-vue": "^5.2.3",
"@vue/tsconfig": "^0.7.0",
"npm-run-all2": "^7.0.2",
"typescript": "~5.8.0",
"vite": "^6.2.4",
"vite-plugin-vue-devtools": "^7.7.2",
"vue-tsc": "^2.2.8"
"@ianvs/prettier-plugin-sort-imports": "^4.7.0",
"@tailwindcss/vite": "^4.1.14",
"@tsconfig/node22": "^22.0.2",
"@types/lodash": "^4.17.20",
"@types/node": "^22.18.6",
"@types/poisson-disk-sampling": "^2.2.4",
"@vitejs/plugin-vue": "^6.0.1",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.6.0",
"@vue/tsconfig": "^0.8.1",
"adk-typescript": "^1.0.3",
"eslint": "^9.33.0",
"eslint-plugin-vue": "^10.4.0",
"prettier": "3.6.2",
"prettier-plugin-tailwindcss": "^0.6.14",
"tailwindcss": "^4.1.14",
"typescript": "^5.9.0",
"vite": "^7.1.7",
"vite-plugin-arraybuffer": "^0.1.1",
"vite-plugin-vue-devtools": "^8.0.2",
"vue-tsc": "^3.1.0"
}
}
Binary file removed frontend/public/apple-touch-icon.png
Binary file not shown.
Binary file removed frontend/public/example/figure1.png
Binary file not shown.
Binary file removed frontend/public/example/figure2.png
Binary file not shown.
Binary file removed frontend/public/example/figure3.png
Binary file not shown.
Binary file removed frontend/public/favicon-96x96.png
Binary file not shown.
Binary file removed frontend/public/favicon.ico
Binary file not shown.
3 changes: 0 additions & 3 deletions frontend/public/favicon.svg

This file was deleted.

65 changes: 65 additions & 0 deletions frontend/public/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed frontend/public/manugen-ai-logo.png
Binary file not shown.
Binary file removed frontend/public/manugen-ai-logo_smaller.png
Binary file not shown.
Binary file added frontend/public/share.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading