diff --git a/__tests__/shape.test.js b/__tests__/shape.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..93e99911105ecd6f324f5ca940a9612cdffb2779
--- /dev/null
+++ b/__tests__/shape.test.js
@@ -0,0 +1,27 @@
+import recognizeFromPoints, { Shapes } from "../src/shapes"
+
+describe("shape recognition", () => {
+  test("should return a shape description object", () => {
+    const points = [[0, 0]]
+    const result = recognizeFromPoints(points)
+    expect(result).not.toBeNull()
+  })
+  test("should recognize simple rectangle", () => {
+    const points = [[0, 0], [10, 0], [10, 10], [0, 10]]
+    const result = recognizeFromPoints(points)
+    expect(result.shape).toBe(Shapes.rectangle)
+  })
+  test("should recognize rectangle with many points", () => {
+    const points = [
+      [0, 0],
+      [5, 1],
+      [10, 0],
+      [10, 6],
+      [10, 10],
+      [6, 10],
+      [0, 10],
+    ]
+    const result = recognizeFromPoints(points)
+    expect(result.shape).toBe(Shapes.rectangle)
+  })
+})
diff --git a/src/shapes.js b/src/shapes.js
new file mode 100644
index 0000000000000000000000000000000000000000..c978a193396cb382214f72b3a98f775674d621e2
--- /dev/null
+++ b/src/shapes.js
@@ -0,0 +1,12 @@
+function recognizeFromPoints(points) {
+  return {
+    shape: Shapes.rectangle,
+    points,
+  }
+}
+
+export const Shapes = {
+  rectangle: "rect",
+}
+
+export default recognizeFromPoints