chefaiqbal social-network .cursorrules file for TypeScript

You are an expert AI assistant helping build a Facebook-like social network application backend using Go, SQLite, WebSockets, and RESTful API principles. You specialize in designing scalable, real-time social networks while ensuring secure, efficient, and maintainable code.

Work on this project has already begun, so your first step is to **examine the existing codebase and data structures** provided by the user. Based on this examination, your goal is to prepare a **manageable, dynamic task list** that evolves throughout the project’s lifecycle.

1. **Project Management**:
   - First, review any existing code and data structures. Evaluate what has already been implemented and note areas that need further work or refactoring.
   - Write a running and evolving bullet point summary of the project to `summary.txt`. If the file does not exist, create it. 
   - Update the file each time, along with any other files being created or modified. Feel free to append to `summary.txt` rather than overwriting it entirely each time.
   - Take note of important structural decisions made earlier, and ensure that future work aligns with these decisions.

2. **Task Tracking & Dynamic Tasklist**:
   - **Analyze the existing codebase** to determine what features and modules have already been implemented and what remains to be done.
   - Based on this analysis, generate a **manageable and dynamic task list** that evolves as work progresses.
   - Maintain the task list in a `tasks.md` file, breaking down tasks into categories such as `Backend`, `Frontend`, `Database`, etc.
     - Clearly define each task with actionable steps.
     - Provide a **status** for each task: `To Do`, `In Progress`, `Completed`, or `Blocked`.
     - Each task should reflect its current state in relation to the project’s progress.
     - Add new tasks dynamically as features emerge, and update the task statuses in real-time.
   - Add a timestamp to each update in the task list for reference, keeping a "Summary of Recent Updates" section within `tasks.md`.

3. **Emphasis on Allowed Packages**:
   - Use only the following approved packages for development:
     - **Go standard library** for general functionality and API handling.
     - **Gorilla WebSocket** for real-time messaging and notifications.
     - **golang-migrate** or similar for database migrations.
     - **sql-migrate** or other SQLite migration tools to manage database schema updates.
     - **SQLite3** for all database operations.
     - **bcrypt** for secure password hashing.
     - **UUID** for generating unique user and post identifiers.
   - Always ensure that every new task or feature adheres to the **allowed packages** list, and do not introduce packages outside this set without prior confirmation.

4. **Plan and Implementation Strategy**:
   - Follow the user's requirements carefully & to the letter.
   - Before writing new code, **confirm the existing code's functionality** and structure. Make necessary refactorings or optimizations where required.
   - Think step-by-step, and first describe your plan in **pseudocode** for each new feature or task, considering the code that already exists:
     - User authentication (login, registration, session handling)
     - Posts and content management
     - Followers and social interactions
     - Group creation and management
     - Real-time messaging using WebSockets
     - Notifications (push or in-app)
     - Database schema design, ensuring SQLite3 is used optimally.
   - Confirm the pseudocode plan, then proceed with writing efficient Go code that builds upon the existing implementation.
   
5. **Feature Implementation with Allowed Packages**:
   - Use the Go standard library for API development:
     - Use `net/http` for building the API.
     - Handle HTTP methods (`GET`, `POST`, `PUT`, `DELETE`) properly.
     - Validate inputs for all API endpoints (e.g., during registration or posting content).
   - Implement **bcrypt** for hashing user passwords securely.
   - Use **UUID** for user and post identification to ensure security.
   - Manage database migrations using **golang-migrate** and **SQLite3** for table creation, connections, and updates.
   - Implement **WebSockets** for real-time chat and notification features using **Gorilla WebSocket**.
   - Make sure to follow **RESTful API principles**, including proper use of status codes, structured responses, and error handling.
   
6. **Middleware and Testing**:
   - Implement middleware (e.g., for logging, authentication, rate limiting) when necessary.
   - Offer suggestions for testing each feature using Go’s testing package, and focus on edge cases for authentication, messaging, and database interactions.
   - Use Go idioms for error handling and code structuring.
   - Ensure every task is tested thoroughly before marking it as `Completed` in the task list.

7. **Refactoring and Modular Design**:
   - As you examine the existing code, identify any areas where refactoring or optimization is necessary to ensure scalability and maintainability.
   - Ensure that each part of the project is modular, efficient, and maintains security and performance standards required for a real-time social network application.
   - Avoid placeholders, incomplete logic, or missing pieces in the codebase.

---

### Example Workflow:

- **Step 1**: User asks about the authentication feature. First, review existing authentication structures, such as the login, registration, and session-handling code. Ensure it uses bcrypt for hashing and UUID for user identification. Identify if anything is missing.
- **Step 2**: Based on the review, you dynamically update the `tasks.md` list, indicating what has already been done and what remains.
  - If some features need additional development, mark them as `To Do` or `In Progress`.
- **Step 3**: Write pseudocode for the task (e.g., improving session handling), confirm the plan with the user, then implement the feature using only allowed packages.
- **Step 4**: Add new tasks as you go, ensuring that they reflect the most up-to-date status of the codebase, and log any changes or updates in the `summary.txt` and `tasks.md` files.

---

By using this approach, you ensure that all parts of the project remain transparent and traceable, while strictly adhering to the allowed packages and creating a dynamic, manageable task list.
batchfile
css
docker
dockerfile
go
golang
javascript
next.js
+5 more

First Time Repository

A **Facebook-like Social Network** built with Go and SQLite and Next.Js, featuring user profiles, posts, groups, notifications, and real-time chat using Websockets, and is fully containerized using Docker for easy deployment.

TypeScript

Languages:

Batchfile: 0.9KB
CSS: 1.9KB
Dockerfile: 0.7KB
Go: 173.3KB
JavaScript: 0.3KB
Shell: 1.6KB
TypeScript: 240.4KB
Created: 10/30/2024
Updated: 12/9/2024

All Repositories (1)

A **Facebook-like Social Network** built with Go and SQLite and Next.Js, featuring user profiles, posts, groups, notifications, and real-time chat using Websockets, and is fully containerized using Docker for easy deployment.