summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2025-06-30 20:55:53 +0800
committeraltaf-creator <dev@altafcreator.com>2025-06-30 20:55:53 +0800
commit2780072a278fa5128cf961284e5c04312d5e6119 (patch)
treee971fb7a47d768de69b31feebc72993e49b229dc
initial commit
-rw-r--r--backend/ai-vision.py48
-rw-r--r--backend/ai.py8
-rw-r--r--backend/alvl.jpgbin0 -> 107082 bytes
-rw-r--r--backend/game_simpliCity_main.pngbin0 -> 1522731 bytes
-rw-r--r--frontend/BitcountGridDouble-VariableFont_CRSV,ELSH,ELXP,slnt,wght.ttfbin0 -> 162000 bytes
-rw-r--r--frontend/index.html21
-rw-r--r--frontend/script.js56
7 files changed, 133 insertions, 0 deletions
diff --git a/backend/ai-vision.py b/backend/ai-vision.py
new file mode 100644
index 0000000..866bcb8
--- /dev/null
+++ b/backend/ai-vision.py
@@ -0,0 +1,48 @@
+from google import genai
+from google.genai import types
+import flask
+import flask_cors
+
+app = flask.Flask(__name__)
+flask_cors.CORS(app)
+
+UPLOAD_FOLDER = "uploads"
+app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
+
+client = genai.Client(api_key="AIzaSyA-mA7v4xlbEAz80uKf3Dywpbeh9ZfpLMs")
+
+
+@app.route("/yeah", methods=["POST"])
+def yeah_flask():
+ uploaded_files = flask.request.files.getlist("files")
+
+ file_names = []
+
+ contents = []
+
+ for file in uploaded_files:
+ file_data = file.read()
+ print(file.filename)
+ file_names.append(file.filename)
+ contents.append(
+ types.Part.from_bytes(
+ data=file_data,
+ mime_type=file.mimetype
+ )
+ )
+
+ contents.append("Please summarise the following content make it concise but detailed, organised into a mind map, structured with clear hierarchy, where each item is first prefixed and just prefixed with a > times depth, where depth starts at 1. For example, a sub item would be \">> subitem\". Do not start or end your message with an approval message, start immediately with the content requested. Absolutely do not add any blank lines, and do not add spaces after the '>' prefix. Do not add numbers after the '>' prefix.")
+
+ response = client.models.generate_content(
+ model="gemini-2.0-flash",
+ contents=contents
+ )
+
+ print(response)
+
+ print("hi")
+ return flask.jsonify({"status": "success", "map": response.text})
+
+
+if __name__ == '__main__':
+ app.run(debug=True, host='127.0.0.1', port=9000)
diff --git a/backend/ai.py b/backend/ai.py
new file mode 100644
index 0000000..1e63b94
--- /dev/null
+++ b/backend/ai.py
@@ -0,0 +1,8 @@
+from google import genai
+
+client = genai.Client(api_key="AIzaSyA-mA7v4xlbEAz80uKf3Dywpbeh9ZfpLMs")
+
+response = client.models.generate_content(
+ model="gemini-2.0-flash", contents="Explain how AI works in a few words"
+)
+print(response.text)
diff --git a/backend/alvl.jpg b/backend/alvl.jpg
new file mode 100644
index 0000000..cd35987
--- /dev/null
+++ b/backend/alvl.jpg
Binary files differ
diff --git a/backend/game_simpliCity_main.png b/backend/game_simpliCity_main.png
new file mode 100644
index 0000000..e31067c
--- /dev/null
+++ b/backend/game_simpliCity_main.png
Binary files differ
diff --git a/frontend/BitcountGridDouble-VariableFont_CRSV,ELSH,ELXP,slnt,wght.ttf b/frontend/BitcountGridDouble-VariableFont_CRSV,ELSH,ELXP,slnt,wght.ttf
new file mode 100644
index 0000000..78fd014
--- /dev/null
+++ b/frontend/BitcountGridDouble-VariableFont_CRSV,ELSH,ELXP,slnt,wght.ttf
Binary files differ
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..c9ef360
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>mindmap.ai</title>
+ <script src="Https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
+<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=Bitcount+Grid+Double:wght@100..900&display=swap" rel="stylesheet">
+</head>
+<body class="max-w-2xl mx-auto text-center bg-cover bg-fixed bg-bottom bg-no-repeat h-screen bg-[url(https://images.unsplash.com/photo-1509803874385-db7c23652552?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D)] from-sky-500 to-indigo-500">
+ <script defer src="/script.js"></script>
+ <h1 class="text-5xl mt-8 font-[Bitcount_Grid_Double] text-white">mindmap.ai</h1>
+ <input autocomplete=off class="truncate p-4 bg-slate-700/40 border-2 rounded-full backdrop-blur-2xl border-blue-300 mt-8 text-white" type="file" id="file-input" multiple accept="image/*, .pdf, .docx">
+ <ol id="file-list" class="hidden">
+
+ </ol>
+ <button id="doit-btn" class="rounded-full border-blue-300 border-2 bg-sky-700 mt-8 p-4 text-white hover:bg-sky-500 active:bg-sky-800">Make a mind map!</button>
+ <div id="mindmap" class="text-left text-white p-8 border-2 border-blue-300 rounded-4xl mt-16 backdrop-blur-2xl bg-slate-700/30"></div>
+</body>
+</html>
diff --git a/frontend/script.js b/frontend/script.js
new file mode 100644
index 0000000..5af0c08
--- /dev/null
+++ b/frontend/script.js
@@ -0,0 +1,56 @@
+document.addEventListener('DOMContentLoaded', () => {
+ const fileInput = document.getElementById('file-input');
+ const fileList = document.getElementById('file-list');
+ const btn = document.getElementById('doit-btn');
+ const cont = document.getElementById('mindmap');
+
+ var files;
+
+ fileInput.addEventListener('change', (event) => {
+ fileList.innerHTML = "";
+
+ files = event.target.files;
+
+ for (let i = 0; i < files.length; i++) {
+ fileList.innerHTML += `<li>${files[i].name}</li>`;
+ }
+ });
+
+ btn.addEventListener('click', async () => {
+ if (files.length == 0) return;
+
+ const formData = new FormData();
+
+ for (let i = 0; i < files.length; i++) {
+ formData.append('files', files[i]);
+ }
+
+ cont.innerHTML = "Generating...";
+
+ const response = await fetch("http://127.0.0.1:9000/yeah", {
+ method: "POST",
+ body: formData
+ })
+
+
+ const data = await response.json();
+
+ lines = data.map.split('\n')
+
+ cont.innerHTML = "";
+
+ for (let i = 0; i < lines.length; i++) {
+ if (lines.length == 0) return;
+
+ let depth = 0;
+ for (let j = 0; j < lines[i].length; j++) {
+ if (lines[i][j] == ">") {
+ depth++;
+ } else {break;}
+ }
+console.log(lines[i].slice(depth, lines[i].length))
+ cont.innerHTML += `<div style="display: flex; gap: 1rem;"><span style="opacity: 50%; margin-left: ${(depth - 1) * 2}rem"> ▸ </span><span>${lines[i].slice(depth, lines[i].length)}</span></div>`;
+ console.log(cont.innerHTML);
+ }
+ });
+});