diff --git a/apps/docs/content/(array)/48-rotate-image.mdx b/apps/docs/content/(array)/48-rotate-image.mdx
new file mode 100644
index 0000000..02c2657
--- /dev/null
+++ b/apps/docs/content/(array)/48-rotate-image.mdx
@@ -0,0 +1,37 @@
+---
+title: '48. Rotate Image'
+description: You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise)
+sidebar:
+ label: 'Rotate Image'
+ badge: 'Medium'
+---
+
+Matrix Index Math
+
+### Example 1:
+- Input: `matrix = [[1,2,3],[4,5,6],[7,8,9]]`
+- Output: `[[7,4,1],[8,5,2],[9,6,3]]`
+
+### Example 2:
+- Input: `matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]`
+- Output: `[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]`
+
+### Constraints:
+
+- `n == matrix.length == matrix[i].length`
+- `1 <= n <= 20`
+- `-1000 <= matrix[i][j] <= 1000`
+
+## Solution
+
+```py
+class Solution:
+ def rotate(self, matrix: List[List[int]]) -> None:
+ n = len(matrix)
+ for r in range(n):
+ for c in range(r + 1, n):
+ matrix[r][c], matrix[c][r] = matrix[c][r], matrix[r][c]
+
+ for r in range(n):
+ matrix[r].reverse()
+```
diff --git a/apps/docs/content/(array)/54-spiral-matrix.mdx b/apps/docs/content/(array)/54-spiral-matrix.mdx
new file mode 100644
index 0000000..f9043f9
--- /dev/null
+++ b/apps/docs/content/(array)/54-spiral-matrix.mdx
@@ -0,0 +1,59 @@
+---
+title: '54. Spiral Matrix'
+description: Given an m x n matrix, return all elements of the matrix in spiral order
+sidebar:
+ label: 'Spiral Matrix'
+ badge: 'Medium'
+---
+
+Matrix Index Math
+
+### Example 1:
+- Input: `matrix = [[1,2,3],[4,5,6],[7,8,9]]`
+- Output: `[1,2,3,6,9,8,7,4,5]`
+
+### Example 2:
+- Input: `matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]`
+- Output: `[1,2,3,4,8,12,11,10,9,5,6,7]`
+
+### Constraints:
+
+- `m == matrix.length`
+- `n == matrix[i].length`
+- `1 <= m, n <= 10`
+- `-100 <= matrix[i][j] <= 100`
+
+## Solution
+
+```py
+class Solution:
+ def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
+ res = []
+ top, bottom = 0, len(matrix) - 1
+ left, right = 0, len(matrix[0]) - 1
+
+ while top <= bottom and left <= right:
+ # 1. Top Row
+ for c in range(left, right + 1):
+ res.append(matrix[top][c])
+ top += 1
+
+ # 2. Right Column
+ for r in range(top, bottom + 1):
+ res.append(matrix[r][right])
+ right -= 1
+
+ # 3. Bottom Row
+ if top <= bottom:
+ for c in range(right, left - 1, -1):
+ res.append(matrix[bottom][c])
+ bottom -= 1
+
+ # 4. Left Column
+ if left <= right:
+ for r in range(bottom, top - 1, -1):
+ res.append(matrix[r][left])
+ left += 1
+
+ return res
+```
diff --git a/apps/docs/content/(linked-list)/2-add-two-numbers.mdx b/apps/docs/content/(linked-list)/2-add-two-numbers.mdx
new file mode 100644
index 0000000..be61c28
--- /dev/null
+++ b/apps/docs/content/(linked-list)/2-add-two-numbers.mdx
@@ -0,0 +1,57 @@
+---
+title: '2. Add Two Numbers'
+description: You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list
+sidebar:
+ label: 'Add Two Numbers'
+ badge: 'Medium'
+---
+
+Hybrid Structures
+
+### Example 1:
+- Input: `l1 = [2,4,3], l2 = [5,6,4]`
+- Output: `[7,0,8]`
+- Explanation: `342 + 465 = 807`.
+
+### Example 2:
+- Input: `l1 = [0], l2 = [0]`
+- Output: `[0]`
+
+### Example 3:
+- Input: `l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]`
+- Output: `[8,9,9,9,0,0,0,1]`
+
+### Constraints:
+
+- The number of nodes in each linked list is in the range [1, 100].
+- `0 <= Node.val <= 9`
+- It is guaranteed that the list represents a number that does not have leading zeros.
+
+## Solution
+
+```py
+# Definition for singly-linked list.
+# class ListNode:
+# def __init__(self, val=0, next=None):
+# self.val = val
+# self.next = next
+class Solution:
+ def addTwoNumbers(
+ self, l1: Optional[ListNode], l2: Optional[ListNode]
+ ) -> Optional[ListNode]:
+
+ dummy = ListNode()
+ carry = 0
+ curr = dummy
+ while l1 or l2 or carry:
+ s = (l1.val if l1 else 0) + (l2.val if l2 else 0) + carry
+ carry, val = divmod(s, 10)
+
+ curr.next = ListNode(val)
+ curr = curr.next
+
+ l1 = l1.next if l1 else None
+ l2 = l2.next if l2 else None
+
+ return dummy.next
+```