4 changed files with 202 additions and 1 deletions
@ -0,0 +1,56 @@ |
|||||
|
--- |
||||
|
description: |
||||
|
globs: |
||||
|
alwaysApply: false |
||||
|
--- |
||||
|
# Time Safari / Endorser Search Tech Ecosystem |
||||
|
|
||||
|
### Purpose |
||||
|
|
||||
|
This describes the overall design & architecture across code repositories. |
||||
|
|
||||
|
The Endorser Server is a service that allows recording of cryptographically signed assertions in a privacy-preserving fashion. Each participant chooses whether to allow any other participant to see their name attached to activity. The service is a convenient way to get basic functions; we expect to provide direct P2P communications to support the same functionality for anyone who wants the alternative. |
||||
|
|
||||
|
Time Safari is a front-end to make it intuitive and interesting to log self-asserted items, mainly of three kinds: |
||||
|
|
||||
|
- Gives, recognizing something given |
||||
|
|
||||
|
- Projects, which can then be the giver or recipient of gives |
||||
|
|
||||
|
- Offers of help, to individuals or projects, which can be fulfilled by subsequent gives |
||||
|
|
||||
|
### Structure |
||||
|
|
||||
|
The primary repos contain the majority of the functionality; the secondary repos are helpful but not absolutely necessary. |
||||
|
|
||||
|
These repos are found on the local filesystem in the same directory as this repo, in ../../../ from this file. |
||||
|
|
||||
|
Primary Repos: |
||||
|
|
||||
|
- endorser-ch is the back-end, written in Typescript |
||||
|
|
||||
|
- crowd-funder-for-time-pwa is the front-end, written in Typescript with Vue & Vite, with deployments for mobile as well as web |
||||
|
|
||||
|
Secondary Repos: |
||||
|
|
||||
|
- image-api is a service for storing images, in Typescript |
||||
|
|
||||
|
- py-push-server is a service to send push notifications |
||||
|
|
||||
|
- lives-of-gifts is the website for the overall vision for humanity |
||||
|
|
||||
|
- gifting-org-content is for design and other creative artifacts |
||||
|
|
||||
|
- kickstarter-for-time is a playground to implement HTML designs that are subsequently moved into crowd-funder-for-time-pwa |
||||
|
|
||||
|
- uport-demo is the web-facing front-end to explain the Endorser server |
||||
|
|
||||
|
- endorser-docs is the documentation explaining the Endoser server design, in Restructured Text format |
||||
|
|
||||
|
- time-safari-web is for the single pages at timesafari.org & timesafari.com |
||||
|
|
||||
|
- endorser-mobile is the previous native app to talk to the Endorser server -- very powerful but harder to use |
||||
|
|
||||
|
These repos are located in GitHub: endorser-ch, endorser-mobile, lives-of-gifts uport-demo, endorser-docs, time-safari-web |
||||
|
|
||||
|
The remaining repos are located at gitea.anomalistdesign.com |
@ -0,0 +1,86 @@ |
|||||
|
--- |
||||
|
description: Node.js and Express.js best practices for backend development |
||||
|
globs: **/*.js, **/*.ts, src/**/*.ts |
||||
|
--- |
||||
|
|
||||
|
# Node.js and Express.js Best Practices |
||||
|
|
||||
|
## Project Structure |
||||
|
- Use proper directory structure |
||||
|
- Implement proper module organization |
||||
|
- Use proper middleware organization |
||||
|
- Keep routes organized by domain |
||||
|
- Implement proper error handling |
||||
|
- Use proper configuration management |
||||
|
|
||||
|
## Express Setup |
||||
|
- Use proper middleware setup |
||||
|
- Implement proper routing |
||||
|
- Use proper error handling |
||||
|
- Configure proper security middleware |
||||
|
- Implement proper validation |
||||
|
- Use proper static file serving |
||||
|
|
||||
|
## API Design |
||||
|
- Use proper REST principles |
||||
|
- Implement proper versioning |
||||
|
- Use proper request validation |
||||
|
- Handle errors properly |
||||
|
- Implement proper response formats |
||||
|
- Document APIs properly |
||||
|
|
||||
|
## Database Integration |
||||
|
- Use proper ORM/ODM |
||||
|
- Implement proper migrations |
||||
|
- Use proper connection pooling |
||||
|
- Implement proper transactions |
||||
|
- Use proper query optimization |
||||
|
- Handle database errors properly |
||||
|
|
||||
|
## Authentication |
||||
|
- Implement proper JWT handling |
||||
|
- Use proper password hashing |
||||
|
- Implement proper session management |
||||
|
- Use proper OAuth integration |
||||
|
- Implement proper role-based access |
||||
|
- Handle auth errors properly |
||||
|
|
||||
|
## Security |
||||
|
- Use proper CORS setup |
||||
|
- Implement proper rate limiting |
||||
|
- Use proper security headers |
||||
|
- Implement proper input validation |
||||
|
- Use proper encryption |
||||
|
- Handle security vulnerabilities |
||||
|
|
||||
|
## Performance |
||||
|
- Use proper caching |
||||
|
- Implement proper async operations |
||||
|
- Use proper connection pooling |
||||
|
- Implement proper logging |
||||
|
- Use proper monitoring |
||||
|
- Handle high traffic properly |
||||
|
|
||||
|
## Testing |
||||
|
- Write proper unit tests |
||||
|
- Implement proper integration tests |
||||
|
- Use proper test runners |
||||
|
- Implement proper mocking |
||||
|
- Test error scenarios |
||||
|
- Use proper test coverage |
||||
|
|
||||
|
## Deployment |
||||
|
- Use proper Docker setup |
||||
|
- Implement proper CI/CD |
||||
|
- Use proper environment variables |
||||
|
- Configure proper logging |
||||
|
- Implement proper monitoring |
||||
|
- Handle deployment errors |
||||
|
|
||||
|
## Best Practices |
||||
|
- Follow Node.js best practices |
||||
|
- Use proper async/await |
||||
|
- Implement proper error handling |
||||
|
- Use proper logging |
||||
|
- Handle process signals properly |
||||
|
- Document code properly |
@ -0,0 +1,57 @@ |
|||||
|
--- |
||||
|
description: TypeScript coding standards and best practices for modern web development |
||||
|
globs: **/*.ts, **/*.tsx, **/*.d.ts |
||||
|
--- |
||||
|
|
||||
|
# TypeScript Best Practices |
||||
|
|
||||
|
## Type System |
||||
|
- Prefer interfaces over types for object definitions |
||||
|
- Use type for unions, intersections, and mapped types |
||||
|
- Avoid using `any`, prefer `unknown` for unknown types |
||||
|
- Use strict TypeScript configuration |
||||
|
- Leverage TypeScript's built-in utility types |
||||
|
- Use generics for reusable type patterns |
||||
|
|
||||
|
## Naming Conventions |
||||
|
- Use PascalCase for type names and interfaces |
||||
|
- Use camelCase for variables and functions |
||||
|
- Use UPPER_CASE for constants |
||||
|
- Use descriptive names with auxiliary verbs (e.g., isLoading, hasError) |
||||
|
- Prefix interfaces for React props with 'Props' (e.g., ButtonProps) |
||||
|
|
||||
|
## Code Organization |
||||
|
- Keep type definitions close to where they're used |
||||
|
- Export types and interfaces from dedicated type files when shared |
||||
|
- Use barrel exports (index.ts) for organizing exports |
||||
|
- Place shared types in a `types` directory |
||||
|
- Co-locate component props with their components |
||||
|
|
||||
|
## Functions |
||||
|
- Use explicit return types for public functions |
||||
|
- Use arrow functions for callbacks and methods |
||||
|
- Implement proper error handling with custom error types |
||||
|
- Use function overloads for complex type scenarios |
||||
|
- Prefer async/await over Promises |
||||
|
|
||||
|
## Best Practices |
||||
|
- Enable strict mode in tsconfig.json |
||||
|
- Use readonly for immutable properties |
||||
|
- Leverage discriminated unions for type safety |
||||
|
- Use type guards for runtime type checking |
||||
|
- Implement proper null checking |
||||
|
- Avoid type assertions unless necessary |
||||
|
|
||||
|
## Error Handling |
||||
|
- Create custom error types for domain-specific errors |
||||
|
- Use Result types for operations that can fail |
||||
|
- Implement proper error boundaries |
||||
|
- Use try-catch blocks with typed catch clauses |
||||
|
- Handle Promise rejections properly |
||||
|
|
||||
|
## Patterns |
||||
|
- Use the Builder pattern for complex object creation |
||||
|
- Implement the Repository pattern for data access |
||||
|
- Use the Factory pattern for object creation |
||||
|
- Leverage dependency injection |
||||
|
- Use the Module pattern for encapsulation |
@ -1,3 +1,5 @@ |
|||||
# README-first |
# README-first |
||||
|
|
||||
Context for all the repos |
Context for all the technical info, mostly found in git repos |
||||
|
|
||||
|
See ./.cursor/rules/README.mdc |
||||
|
Loading…
Reference in new issue