Refine and cleanup
This commit is contained in:
10
README.md
10
README.md
@@ -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
|
||||||
|
|||||||
@@ -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}` });
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
const config = {
|
|
||||||
port: process.env.PORT || 3001,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default config;
|
|
||||||
1292
backend/package-lock.json
generated
Normal file
1292
backend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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}` });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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}`);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user