diff --git a/index.html b/index.html
index 71ec3b221483010927b9e6490d839e6d0c73c58b..0b8fd466c6b1498a669344dc9eccd31e646f6f1b 100644
--- a/index.html
+++ b/index.html
@@ -11,7 +11,9 @@
     <!--script type="module" src="/src/main.ts"></script>
     <script type="module" src="/src/cg/main.ts"></script>
     <script type="module" src="/src/cg/pgIntro.ts"></script>
-    <script type="module" src="/src/cg/vector.ts"></script-->
+    <script type="module" src="/src/cg/vector.ts"></script>
     <script type="module" src="/src/cg/perspectiveDivide.ts"></script>
+    <script type="module" src="/src/cg/walkToVec.ts"></script-->
+    <script type="module" src="/src/cg/basis.ts"></script>
   </body>
 </html>
diff --git a/src/cg/basis.ts b/src/cg/basis.ts
new file mode 100644
index 0000000000000000000000000000000000000000..449d59cd21b4eb42d978be02babc6fc485471a12
--- /dev/null
+++ b/src/cg/basis.ts
@@ -0,0 +1,31 @@
+import Playground from "./playground";
+import { vecAdd } from "./utils";
+import { vecMultiply } from "./utils";
+
+const pg = new Playground();
+pg.gridXZ();
+
+const initialVec = [1.5, 2, 0.3];
+
+let basis = [1, 2, 1];
+basis = vecMultiply(basis, 0.5);
+const iHat = [basis[0], 0, 0];
+const jHat = [0, basis[1], 0];
+const kHat = [0, 0, basis[2]];
+
+const vecAlongIHat = [initialVec[0] * iHat[0], initialVec[0] * iHat[1], initialVec[0] * iHat[2]];
+const vecAlongJHat = [initialVec[1] * jHat[0], initialVec[1] * jHat[1], initialVec[1] * jHat[2]];
+const vecAlongKHat = [initialVec[2] * kHat[0], initialVec[2] * kHat[1], initialVec[2] * kHat[2]];
+
+pg.visVector(initialVec, {color: 'purple', label: "initial vector"});
+pg.visVector(iHat, {color: 'red', label: "î"});
+pg.visVector(jHat, {color: 'green', label: "^j"});
+pg.visVector(kHat, {color: 'blue', label: "^k"});
+pg.visVector(vecAlongIHat, {color: 'pink', label: "along î"});
+pg.visVector(vecAlongJHat, {color: 'limegreen', label: "along ^j"});
+pg.visVector(vecAlongKHat, {color: 'lightblue', label: "along ^k"});
+
+let resultVec = vecAdd(vecAlongIHat, vecAlongJHat);
+resultVec = vecAdd(resultVec, vecAlongKHat);
+
+pg.visVector(resultVec, {color: 'yellow', label: "result"});
\ No newline at end of file
diff --git a/src/cg/walkToVec.ts b/src/cg/walkToVec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2b00166336277e28c7c3b50849413061e264ab26
--- /dev/null
+++ b/src/cg/walkToVec.ts
@@ -0,0 +1,15 @@
+import Playground from "./playground";
+
+const pg = new Playground();
+pg.gridXZ();
+const v = [1, 2, -2];
+
+pg.visVector(v, { color: "dodgerblue", label: "V" });
+
+const alongX = [v[0], 0, 0];
+const alongY = [0, v[1], 0];
+const alongZ = [0, 0, v[2]];
+pg.visVector(alongX, { color: 'red' });
+pg.visVector(alongY, { color: 'green', placeAt: alongX });
+pg.visVector(alongZ, { color: 'blue', placeAt: [alongX[0], alongY[1], 0] });
+