Refine and cleanup

This commit is contained in:
KS Jannette
2026-02-13 10:42:37 -05:00
parent 02affb154c
commit 6b7324c320
10 changed files with 1306 additions and 20 deletions

View File

@@ -1,10 +1,10 @@
# kohngrüti app # kongruity app
kohngrüti employs Large Language Model ("LLM") semantic grouping functionality to cluster large volumes of "to dos" or issue tags in development (or other) settings, according to thematic or topical similarity. kongruity employs Large Language Model ("LLM") semantic grouping functionality to cluster large volumes of "to dos" or issue tags in development (or other) settings, according to thematic or topical similarity.
(To learn more about this topic, see, e.g., [Kozlowski A., Boutyline A., Semantic Structure in Large Language Model Embeddings Aug. 2025, arXiv:2508.10003v1:04 Aug 2025](https://arxiv.org/html/2508.10003v1)). (To learn more about this topic, see, e.g., [Kozlowski A., Boutyline A., Semantic Structure in Large Language Model Embeddings Aug. 2025, arXiv:2508.10003v1:04 Aug 2025](https://arxiv.org/html/2508.10003v1)).
In the world of kohngrüti, these "to dos" are called "sticky notes." kohngrüti's React/Vite UI views a board of seemingly chaotic "sticky notes". But with one click, they are transformed into manageable, actionable groups, each with a header that explains the group semantic interrelation. In the world of kongruity, these "to dos" are called "sticky notes." kongruity's React/Vite UI views a board of seemingly chaotic "sticky notes". But with one click, they are transformed into manageable, actionable groups, each with a header that explains the group semantic interrelation.
The backend is an Express API that serves "sticky note" data and proxies semantic grouping requests to Antrhopic Claude. The backend is an Express API that serves "sticky note" data and proxies semantic grouping requests to Antrhopic Claude.
@@ -20,8 +20,8 @@ Developers may feel free to install other LLM SDKs and alter the syntax at backe
### 1. Unzip the project ### 1. Unzip the project
```bash ```bash
unzip kohngrüti.zip unzip kongruity.zip
cd kohngrüti cd kongruity
``` ```
### 2. Create a secrets file ### 2. Create a secrets file

View File

@@ -1,13 +1,13 @@
import express from 'express'; import express from 'express';
import cors from 'cors'; import cors from 'cors';
import notesRoutes from './routes/notes.routes.js'; import router from './routes/notes.routes.js';
const app = express(); const app = express();
app.use(cors()); app.use(cors());
app.use(express.json()); app.use(express.json());
app.use('/v1/notes', notesRoutes); app.use('/v1/notes', router);
app.use((req, res) => { app.use((req, res) => {
res.status(404).json({ error: `Requested path is invalid or does not exist: ${req.method} ${req.originalUrl}` }); res.status(404).json({ error: `Requested path is invalid or does not exist: ${req.method} ${req.originalUrl}` });

View File

@@ -1,5 +0,0 @@
const config = {
port: process.env.PORT || 3001,
};
export default config;

1292
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@ router.post('/cluster', async (req, res) => {
const clusters = await clusterNotes(notes); const clusters = await clusterNotes(notes);
res.json(clusters); res.json(clusters);
} catch (err) { } catch (err) {
res.status(500).json({ error: 'Clustering failed' }); res.status(500).json({ error: `Clustering failed: ${err}` });
} }
}); });

View File

@@ -1,7 +1,6 @@
import app from './app.js'; import app from './app.js';
import config from './config/index.js';
const PORT = config.port || 3001; const PORT = process.env.PORT || 3001;
app.listen(PORT, () => { app.listen(PORT, () => {
console.log(`Backend running on port ${PORT}`); console.log(`Backend running on port ${PORT}`);

View File

@@ -5,7 +5,7 @@
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&icon_names=recenter" /> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&icon_names=recenter" />
<title>kohngrüti app</title> <title>kongruity app</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>

View File

@@ -2,7 +2,7 @@ const Navbar = () => {
return ( return (
<div className="main-head-box"> <div className="main-head-box">
<div className="main-head-subbox-left"> <div className="main-head-subbox-left">
<h1 className="main-head">kohngrüti</h1> <h1 className="main-head">kongruity</h1>
</div> </div>
<div className="main-head-subbox-right"> <div className="main-head-subbox-right">
<span className="material-symbols-outlined">recenter</span> <span className="material-symbols-outlined">recenter</span>

View File

@@ -1,7 +1,7 @@
.main-head-box { .main-head-box {
border-radius: 8px; border-radius: 8px;
border: 1px solid #6dd6f4; border: 1px solid #6dd6f4;
background-color: rgb(92, 0, 91); background-color: rgb(92, 0 91);
display: flex; display: flex;
} }

View File

@@ -36,11 +36,11 @@ describe('App routing', () => {
it('should render the Home page on "/"', async () => { it('should render the Home page on "/"', async () => {
renderApp('/'); renderApp('/');
expect(await screen.findByText('kohngrüti')).toBeInTheDocument(); expect(await screen.findByText('kongruity')).toBeInTheDocument();
}); });
it('should redirect unknown routes to Home', async () => { it('should redirect unknown routes to Home', async () => {
renderApp('/some/random/path'); renderApp('/some/random/path');
expect(await screen.findByText('kohngrüti')).toBeInTheDocument(); expect(await screen.findByText('kongruity')).toBeInTheDocument();
}); });
}); });