diff --git a/apps/echo/go.mod b/apps/echo/go.mod
new file mode 100644
index 0000000..b958ea0
--- /dev/null
+++ b/apps/echo/go.mod
@@ -0,0 +1,3 @@
+module echo
+
+go 1.23.1
diff --git a/apps/echo/main.go b/apps/echo/main.go
new file mode 100644
index 0000000..9c46de6
--- /dev/null
+++ b/apps/echo/main.go
@@ -0,0 +1,74 @@
+package main
+
+import (
+	"flag"
+	"fmt"
+	"io"
+	"log"
+	"net"
+)
+
+var port = flag.Int("port", 8080, "port to listen on")
+
+const welcomeMessage = `
+    ____  ____  ____  ____ 
+   ||D ||||O ||||D ||||O ||
+   ||__||||__||||__||||__||
+   |/__\||/__\||/__\||/__\|
+
+Welcome to the Echo Server!
+`
+
+func main() {
+	flag.Parse()
+
+	// Listen on TCP port from flag
+	listener, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
+	if err != nil {
+		log.Fatalf("Failed to start server: %v", err)
+	}
+	defer listener.Close()
+	fmt.Printf("Echo server listening on :%d\n", *port)
+
+	for {
+		// Accept incoming connections
+		conn, err := listener.Accept()
+		if err != nil {
+			log.Printf("Failed to accept connection: %v", err)
+			continue
+		}
+		// Handle each connection in a separate goroutine
+		go func(c net.Conn) {
+			remoteAddr := c.RemoteAddr().String()
+			log.Printf("New connection from %s", remoteAddr)
+			if err := handleConnection(c); err != nil && err != io.EOF {
+				log.Printf("Error handling connection from %s: %v", remoteAddr, err)
+			}
+			log.Printf("Connection closed from %s", remoteAddr)
+		}(conn)
+	}
+}
+
+func handleConnection(conn net.Conn) error {
+	defer conn.Close()
+
+	// Send welcome message
+	if _, err := conn.Write([]byte(welcomeMessage)); err != nil {
+		return fmt.Errorf("sending welcome message: %w", err)
+	}
+
+	// Create a buffer for reading data
+	buffer := make([]byte, 1024)
+
+	for {
+		// Read incoming data
+		n, err := conn.Read(buffer)
+		if err != nil {
+			return err
+		}
+		// Echo the data back to the client
+		if _, err = conn.Write(buffer[:n]); err != nil {
+			return fmt.Errorf("writing to connection: %w", err)
+		}
+	}
+}
\ No newline at end of file
