Skip to content

[FEATURE] Create Feed Page - DRAFT#121

Merged
elliotBraem merged 6 commits intostagingfrom
feat/curation-engine
Apr 11, 2025
Merged

[FEATURE] Create Feed Page - DRAFT#121
elliotBraem merged 6 commits intostagingfrom
feat/curation-engine

Conversation

@saadiqbal-dev
Copy link
Copy Markdown
Collaborator

@saadiqbal-dev saadiqbal-dev commented Apr 8, 2025

Resolves: #117

Summary by CodeRabbit

  • New Features
    • Introduced a comprehensive feed creation experience featuring a multi-step form for entering basic information, configuring curation settings, and reviewing feeds.
    • Added an interactive content processing display with both visual and JSON editing options.
    • Updated navigation so that the "Submit Content" link now leads directly to the new feed creation flow.
    • Enhanced user profile image handling with intelligent fallback options.
    • Rolled out new modular UI form components to improve overall user interactions.
    • Added new components for managing content approvers and publishing integrations.
    • Implemented a customizable progress indicator for content processing steps.

@vercel
Copy link
Copy Markdown

vercel bot commented Apr 8, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
curatedotfun-app ✅ Ready (Inspect) Visit Preview 💬 Add feedback Apr 11, 2025 6:18am

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 8, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This pull request introduces a new "create feed" feature. It adds several dependencies to support form handling and schema validation, new React components for building the feed creation interface, and updates to the route configuration. The changes include both UI component additions (including multi-step forms and various UI elements) and navigation updates to link to the new feed page.

Changes

File(s) Change Summary
frontend/package.json Added dependencies: @hookform/resolvers, @radix-ui/react-checkbox, @radix-ui/react-label, @radix-ui/react-progress, @radix-ui/react-switch, @radix-ui/react-tabs, react-hook-form, zod.
frontend/src/components/{BasicInformationForm.tsx, ContentProgress.tsx, CreateFeedHero.tsx, CurationFormSteps.tsx, CurationSettingsForm.tsx, ContentApprovers.tsx, JsonEditor.tsx, StepItem.tsx, TemplateElement.tsx, VisualEditor.tsx, PublishingIntegrations.tsx, EmptyState.tsx, Header.tsx, UserMenu.tsx, Icons.tsx} Introduced new feed creation and curation components, including forms for basic information, content processing steps, and user interface elements for managing content and approvals.
frontend/src/components/ui/{form.tsx, input.tsx, label.tsx, progress.tsx, tabs.tsx, textarea.tsx, checkbox.tsx, switch.tsx} Added a suite of reusable UI components: a comprehensive form system (with Form, FormField, FormItem, etc.), Input, Label, Progress bar, Tabs interface, Textarea, Checkbox, and Switch.
frontend/src/routeTree.gen.ts Updated the routing configuration to include the new /create-feed/ route with corresponding interface and manifest updates.
frontend/src/routes/create-feed/index.tsx Added a new route component for creating feeds, integrating the header, hero section, and multi-step forms.

Sequence Diagram(s)

sequenceDiagram
  participant U as User
  participant H as Header
  participant CFP as CreateFeedPage
  participant CFS as CurationFormSteps
  participant BI as BasicInformationForm

  U->>H: Click "Submit Content"
  H->>CFP: Redirect to /create-feed/
  CFP->>H: Render updated Header
  CFP->>CFP: Render CreateFeedHero section
  CFP->>CFS: Mount multi-step form
  CFS->>BI: Render BasicInformationForm (Step 1)
  U->>CFS: Fill form & navigate steps
  CFS->>U: Display progress and validation feedback
Loading

Assessment against linked issues

Objective Addressed Explanation
Create feed page UI & routing [#117]

Possibly related PRs

  • Implements an "All" feed, and improves some misc UI #88: The changes in the main PR, which involve adding new dependencies including react-hook-form and zod, are related to the retrieved PR as both involve enhancements to form handling and validation in the frontend, specifically utilizing react-hook-form for managing form state and validation.

Poem

I'm just a rabbit in a code-filled glade,
Hopping through changes that developers made.
New feeds and forms sprout like springtime bloom,
Dependencies and routes banish any gloom.
I nibble on commits with a joyful little cheer,
Coding in fields where innovation is near.
🐰 Happy hops to all in our evolving frontier!


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai plan to trigger planning for file edits and PR creation.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@saadiqbal-dev
Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 8, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🔭 Outside diff range comments (1)
frontend/package.json (1)

13-44: 💡 Verification agent

🧩 Analysis chain

Appropriate dependencies for form handling and UI components

The added dependencies align with the new UI components being introduced in this PR. This includes form handling libraries (react-hook-form, @hookform/resolvers, zod) and Radix UI components for labels, progress bars, and tabs.


🌐 Web query:

Are there any known compatibility issues between react-hook-form 7.55.0 and zod 3.24.2?

💡 Result:

Yes, there are known compatibility issues between react-hook-form 7.55.0 and zod 3.24.2, primarily related to type inference and compilation errors in TypeScript projects. Here's a breakdown of the key issues:


1. Type System Inconsistencies

  • Problem: When using zodResolver, Zod applies schema transformations after validation, but react-hook-form's type system infers the input type (z.input) instead of the transformed output type (z.output) for submission handlers[1][4]. This creates a mismatch between runtime data (transformed) and TypeScript’s inferred types (untransformed).
    • Example: If a Zod schema transforms a string to a number, the submit handler’s parameter will still be typed as string, even though the runtime value is a number[1].
  • Workaround: Manually assert the type in the submit handler or adjust the schema to avoid transformations that conflict with type inference.

2. TypeScript Compilation Failures

  • Problem: Zod 3.24.2 introduced changes that cause TypeScript to throw Type instantiation is excessively deep and possibly infinite errors when used with react-hook-form’s resolvers[3][7]. This occurs in projects where dependencies use differing Zod versions (e.g., a library uses Zod 3.23.x while the main project uses 3.24.x)[3].
  • Root Cause: Zod’s type definitions in 3.24.2 are incompatible with older versions of @hookform/resolvers, leading to recursive type errors[3][7].
  • Fix: Downgrade to Zod 3.24.1 or ensure all dependencies use the same Zod version. This resolves the infinite recursion issue[3][7].

3. Best Practices for Compatibility

  1. Version Alignment:
    • Use zod@3.24.1 instead of 3.24.2 to avoid compilation crashes[3][7].
    • Ensure @hookform/resolvers is updated to the latest version compatible with your Zod version.
  2. Schema Design:
    • Avoid complex transformations in Zod schemas if type mismatches in submit handlers are problematic[1][4].
    • Use z.infer to manually align types where necessary:
      const formSchema = z.object({ field: z.string().transform(/* ... */) });
      type FormData = z.infer<typeof formSchema>; // Explicitly infer output type

Key Takeaways

  • The issues stem primarily from Zod’s type system changes in 3.24.2 and react-hook-form’s reliance on input types for validation.
  • Downgrading to Zod 3.24.1 is the most reliable solution for now[3][7].
  • Monitor GitHub issues (#12446, #4027) for updates on fixes.

Citations:


Important: Adjust Zod version to avoid react-hook-form compatibility issues

  • The dependencies generally align with the new UI and form handling libraries introduced in this PR.
  • However, our verification confirms that using react-hook-form 7.55.0 with zod 3.24.2 is known to cause type inference and TypeScript compilation issues.
  • Action Required: Consider downgrading Zod to version 3.24.1 to prevent these errors, or ensure you have robust type assertions and workarounds in place if you wish to retain 3.24.2.

Diff Suggestion (if opting for a downgrade):

-    "zod": "^3.24.2",
+    "zod": "^3.24.1",
🧹 Nitpick comments (17)
frontend/src/components/CreateFeedHero.tsx (1)

2-2: Remove or complete the commented code

There's a comment "Import as a static asset" but no actual import statement follows it. Either complete the import or remove the comment to keep the code clean.

-  // Import as a static asset
frontend/src/components/ui/textarea.tsx (1)

3-3: Consider using relative imports

The import for cn uses an absolute path (src/lib/utils). Consider using a relative path (e.g., ../../../lib/utils) for consistency with other imports in the codebase and to prevent potential issues with path resolution in different environments.

-import { cn } from "src/lib/utils";
+import { cn } from "../../../lib/utils";
frontend/src/components/ui/input.tsx (1)

5-19: Well-implemented Input component with robust styling

This component is a well-structured wrapper around an HTML input element with comprehensive styling using Tailwind CSS. It correctly uses React.forwardRef and properly handles className composition with the cn utility.

Consider adding a default value for the type prop to improve usage clarity:

- const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>(
-   ({ className, type, ...props }, ref) => {
+ const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>(
+   ({ className, type = "text", ...props }, ref) => {
frontend/src/components/ui/label.tsx (1)

7-9: Consider future extensibility with cva variants

The labelVariants is currently defined without any actual variants, which is unusual for cva usage. This works, but you might want to consider defining variants if you plan to extend this component in the future.

If no variants are needed, you could simplify by using a constant string instead:

- const labelVariants = cva(
-   "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
- );
+ const labelClasses = "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70";

Or keep cva for future extensibility by defining actual variants:

- const labelVariants = cva(
-   "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
- );
+ const labelVariants = cva(
+   "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
+   {
+     variants: {
+       size: {
+         default: "",
+         sm: "text-xs",
+         lg: "text-base",
+       },
+     },
+     defaultVariants: {
+       size: "default",
+     },
+   }
+ );
frontend/src/components/ui/progress.tsx (1)

6-23: Well-implemented Progress component with dynamic indicator

The Progress component provides a well-structured wrapper around Radix UI's ProgressPrimitive with good styling defaults and dark mode support. The transform logic for the indicator is correct, calculating the visible portion based on the provided value.

Consider adding a validation or constraint for the value prop to ensure it stays within the expected 0-100 range:

- <ProgressPrimitive.Indicator
-   className="h-full w-full flex-1 bg-neutral-900 transition-all dark:bg-neutral-50"
-   style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
- />
+ <ProgressPrimitive.Indicator
+   className="h-full w-full flex-1 bg-neutral-900 transition-all dark:bg-neutral-50"
+   style={{ transform: `translateX(-${100 - (Math.max(0, Math.min(100, value || 0)))}%)` }}
+ />

This ensures that even if the component receives values outside the expected range, it will still render correctly.

frontend/src/components/CurationSettingsForm.tsx (2)

20-20: Remove empty lines within step objects

There are unnecessary empty lines within the step objects. These should be removed to maintain consistent formatting.

Also applies to: 27-27, 34-34


64-74: Implement placeholder components

The components PublishingIntegrations, ContentApprovers, and SubmissionRules are currently just stubs. Consider implementing them with at least basic UI elements consistent with the design system.

Would you like suggestions for implementation of these components?

frontend/src/components/CurationFormSteps.tsx (4)

7-12: Consider adding an id field to Step type

The Step type could benefit from having an id field for better tracking, similar to how it's implemented in CurationSettingsForm.tsx. This would provide a more stable key for React elements than the array index.

// Define step content types
type Step = {
  title: string;
  description: string;
+ id: number;
  component: React.ReactNode;
};

59-68: Consider making steps clickable for navigation

The step titles are displayed at the top, but they can't be clicked to navigate directly to that step. Consider enhancing UX by making them clickable.

{steps.map((step, index) => (
  <div key={index} className="flex flex-col items-center">
    <span
-     className={`text-sm ${index === currentStep ? "font-bold" : ""}`}
+     className={`text-sm ${index === currentStep ? "font-bold" : ""} cursor-pointer`}
+     onClick={() => setCurrentStep(index)}
    >
      {step.title}
    </span>
  </div>
))}

101-101: Remove unnecessary comment

The comment {/* Navigation buttons */} is redundant since the navigation buttons are already defined above. Consider removing this comment.


106-108: Implement FeedReviewForm component

This placeholder component needs to be implemented with actual review functionality that displays the form data entered in previous steps.

Would you like me to help you implement a more complete version of this component?

frontend/src/components/BasicInformationForm.tsx (3)

48-48: Remove console.log statements

Remove debugging console.log statements before merging to production.

- console.log("User Info:", info);

91-91: Remove commented-out code

There are multiple instances of commented-out code (FormLabel and icon elements) which should either be used or removed entirely.

- {/* <FormLabel>Profile Image</FormLabel> */}
- {/* <Upload className="h-4 w-4" /> */}

Also applies to: 122-122


88-89: Consider a cleaner approach for field destructuring

Using eslint-disable-next-line to avoid unused variable warnings is not ideal. A better approach would be to use proper destructuring syntax.

- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- render={({ field: { onChange, value, ...rest } }) => (
+ render={({ field: { onChange, _value, ...rest } }) => (

Or if the value isn't used at all:

- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- render={({ field: { onChange, value, ...rest } }) => (
+ render={({ field: { onChange, ...rest } }) => (
frontend/src/components/ContentProgress.tsx (2)

56-56: Improve JSON editor placeholder

The current JSON editor placeholder is just {, which might be confusing for users. Consider providing a more helpful placeholder with sample JSON structure.

- <Textarea className="min-h-[200px] font-mono" placeholder="{" />
+ <Textarea className="min-h-[200px] font-mono" placeholder="{
+   // Enter your JSON here
+   \"key\": \"value\"
+ }" />

67-69: Implement placeholder functionality

The "Advanced Content Mapper" and "AI Content Enhancer" steps contain placeholder text. Consider implementing basic UI elements for these features to make the PR more complete.

Would you like me to suggest implementation details for these components?

Also applies to: 77-79

frontend/src/components/UserMenu.tsx (1)

43-79: Consider making the profile image loading less aggressive.
Your ProfileImage component is robust, but using loading="eager" may harm performance on slow connections. Consider making it optional or switching to loading="lazy" for better user experience—particularly if these images aren’t critical-path content.

- loading="eager"
+ loading="lazy"
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 30cbbfe and 482e6c8.

⛔ Files ignored due to path filters (3)
  • backend/bun.lock is excluded by !**/*.lock
  • frontend/bun.lock is excluded by !**/*.lock
  • frontend/public/grid.png is excluded by !**/*.png
📒 Files selected for processing (16)
  • frontend/package.json (2 hunks)
  • frontend/src/components/BasicInformationForm.tsx (1 hunks)
  • frontend/src/components/ContentProgress.tsx (1 hunks)
  • frontend/src/components/CreateFeedHero.tsx (1 hunks)
  • frontend/src/components/CurationFormSteps.tsx (1 hunks)
  • frontend/src/components/CurationSettingsForm.tsx (1 hunks)
  • frontend/src/components/Header.tsx (2 hunks)
  • frontend/src/components/UserMenu.tsx (4 hunks)
  • frontend/src/components/ui/form.tsx (1 hunks)
  • frontend/src/components/ui/input.tsx (1 hunks)
  • frontend/src/components/ui/label.tsx (1 hunks)
  • frontend/src/components/ui/progress.tsx (1 hunks)
  • frontend/src/components/ui/tabs.tsx (1 hunks)
  • frontend/src/components/ui/textarea.tsx (1 hunks)
  • frontend/src/routeTree.gen.ts (13 hunks)
  • frontend/src/routes/create-feed/index.tsx (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (10)
frontend/src/routes/create-feed/index.tsx (2)
frontend/src/components/CreateFeedHero.tsx (1)
  • CreateFeedHero (1-13)
frontend/src/components/CurationFormSteps.tsx (1)
  • CurationFormSteps (14-104)
frontend/src/components/ui/label.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/ui/input.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/ContentProgress.tsx (3)
frontend/src/components/ui/tabs.tsx (4)
  • Tabs (53-53)
  • TabsList (53-53)
  • TabsTrigger (53-53)
  • TabsContent (53-53)
frontend/src/components/ui/textarea.tsx (1)
  • Textarea (22-22)
frontend/src/components/ui/button.tsx (1)
  • Button (58-58)
frontend/src/components/ui/textarea.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/CurationFormSteps.tsx (3)
frontend/src/components/BasicInformationForm.tsx (1)
  • BasicInformationForm (28-209)
frontend/src/components/ui/progress.tsx (1)
  • Progress (26-26)
frontend/src/components/ui/button.tsx (1)
  • Button (58-58)
frontend/src/components/ui/progress.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/CurationSettingsForm.tsx (2)
frontend/src/components/ContentProgress.tsx (1)
  • ContentProgress (15-139)
frontend/src/components/CurationFormSteps.tsx (1)
  • CurationFormSteps (14-104)
frontend/src/components/ui/tabs.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/ui/form.tsx (2)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/ui/label.tsx (1)
  • Label (24-24)
🪛 Biome (1.9.4)
frontend/src/components/ContentProgress.tsx

[error] 6-6: Do not shadow the global "Map" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

🔇 Additional comments (29)
frontend/src/routes/create-feed/index.tsx (2)

1-9: Well structured route declaration!

The file correctly uses createFileRoute from @tanstack/react-router to define a new route at /create-feed/. The import statements are appropriately organized, and the route is properly configured with its component.


10-18: Clean component implementation!

The RouteComponent follows a logical structure by rendering the header, hero section, and form steps in sequence. The component organization makes sense for a multi-step form flow.

frontend/src/components/CreateFeedHero.tsx (1)

4-12: Component structure looks good!

The hero section is well-designed with appropriate heading and descriptive text. The Tailwind classes provide a clean, centered layout with proper spacing.

frontend/src/components/Header.tsx (2)

81-83: Link destination correctly updated!

The desktop navigation link has been appropriately updated to point to the new /create-feed route, maintaining consistency with the new feature.


162-172: Mobile navigation link properly updated!

The mobile navigation link has been correctly updated to point to the /create-feed route, ensuring consistent navigation across all device sizes.

frontend/src/components/ui/textarea.tsx (3)

5-19: Well-implemented reusable component!

The Textarea component is properly implemented using React.forwardRef to allow ref forwarding, which is essential for form library integration. The component correctly spreads props to the underlying textarea element and properly merges custom className with the default styles.


11-14: Comprehensive styling for different states

The component includes proper styling for various states (default, focus, disabled) and accommodates both light and dark themes. The use of the cn utility for class merging ensures proper composition of styles.


20-22: Setting display name is good practice!

Setting the display name is important for debugging and DevTools identification. Good job including this detail.

frontend/src/components/ui/label.tsx (1)

11-21: Well-structured Label component implementation

The Label component is correctly implemented using React.forwardRef and properly integrates with Radix UI's LabelPrimitive. The proper TypeScript types ensure type safety throughout the component.

frontend/src/components/CurationSettingsForm.tsx (1)

1-1: Validate the import is needed

This component imports ContentProgress but doesn't explicitly use it in any props or function parameters. Ensure it's being used directly within the component rendering.

frontend/src/components/ui/tabs.tsx (5)

1-5: Imports and utility usage look solid.
All imports appear correctly declared, and the cn utility from src/lib/utils is properly integrated, promoting consistent styling.


6-22: Tabs and TabsList definitions are clean and idiomatic.
Good use of TabsPrimitive.Root and a properly forwarded ref in TabsList. The styling classes are concise and maintainable.


23-37: TabsTrigger implementation looks good.
The ref-forwarding pattern and conditional classes for active states are well handled. This aligns with Radix UI best practices.


38-52: TabsContent forwarding ref is well-structured.
The component's approach for focus visibility and ring offset is coherent, ensuring strong accessibility features.


53-53: File export is straightforward.
Exporting all tab components together provides a convenient API surface for consumers of this module.

frontend/src/components/UserMenu.tsx (4)

14-18: Initialization of imageError state is appropriate.
Storing the image loading error state in imageError ensures the UI can gracefully handle broken or missing images.


28-29: Resetting the imageError upon fetching new user info is a good pattern.
This logic avoids stale error flags when profile image URLs change.


87-87: Usage of <ProfileImage size="small" /> is correct.
Calling the new component for the small avatar scenario nicely encapsulates your logic.


103-103: Rendering <ProfileImage /> in the dropdown is consistent.
Semantically, the fallback and error handling remains coherent across multiple contexts.

frontend/src/components/ui/form.tsx (5)

1-14: Imports and foundational setup are well-organized.
Bringing in react-hook-form and @radix-ui/react-label ensures seamless integration for form management and labels.


16-41: Form and FormField components adhere to standard patterns.
Using FormProvider and Controller is a straightforward approach, and the context-based FormField design fosters maintainable form structures.


42-63: useFormField hook is properly scoped.
Your error handling for out-of-context usage is clear, safeguarding unexpected integrations.


65-172: Form item components effectively separate concerns.
FormItem, FormLabel, FormControl, FormDescription, and FormMessage collectively provide a coherent, accessible, and flexible form structure. Great approach using unique IDs and aria attributes.


174-184: Exports provide a cohesive API surface.
The consolidated export block makes it straightforward for consumers to adopt form utilities in a consistent manner.

frontend/src/routeTree.gen.ts (5)

22-22: The import statement for the new Create Feed route looks good.

The import follows the same pattern as other route imports in the file.


74-78: Route definition is properly structured.

The CreateFeedIndexRoute is correctly defined with the appropriate id, path, and parent route configuration.


144-150: Note path inconsistency in FileRoutesByPath interface.

The id property has a trailing slash ("/create-feed/") while the path and fullPath properties don't have it ("/create-feed"). While this may be intentional based on how TanStack Router works, verify that this inconsistency doesn't cause routing issues.


190-190: Route integration is complete and consistent.

The new route has been properly added to all necessary interfaces and objects: FileRoutesByFullPath, FileRoutesByTo, FileRoutesById, route lists, RootRouteChildren interface, rootRouteChildren object, and the route manifest.

Also applies to: 202-202, 215-215, 229-229, 240-240, 251-251, 264-264, 275-275, 295-295, 325-327


1-9: Generated file warning.

Be careful with manual edits to this file as it's automatically generated by TanStack Router. According to the file comments, changes may be overwritten when the router regenerates the file. Ensure this file was regenerated properly after adding the new route definition.

@saadiqbal-dev
Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 10, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@saadiqbal-dev saadiqbal-dev marked this pull request as ready for review April 10, 2025 21:11
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

♻️ Duplicate comments (3)
frontend/src/components/CurationSettingsForm.tsx (1)

35-63: Duplicate descriptions in steps array.

All steps except for the first one have the exact same description: "Define how content is processed before being published". Each step should have a unique description that explains its specific purpose.

  {
    title: "Publishing Integrations",
-   description: "Define how content is processed before being published",
+   description: "Configure where and how your content will be published",
    id: 2,
    component: <PublishingIntegrations />,
  },
  {
    title: "Content Approvers",
-   description: "Define how content is processed before being published",
+   description: "Set up who can approve content submissions",
    id: 3,
    component: <ContentApprovers />,
  },
  {
    title: "Submission Rules",
-   description: "Define how content is processed before being published",
+   description: "Define rules for content submissions and moderation",
    id: 4,
    component: <SubmissionRules />,
  },
frontend/src/components/content-progress/data.ts (1)

2-2: ⚠️ Potential issue

Rename Map import to avoid shadowing global Map

The imported Map component from lucide-react shadows the global Map object, which could lead to confusion in your codebase.

- import { Map, Newspaper, Sparkles } from "lucide-react";
+ import { Map as MapIcon, Newspaper, Sparkles } from "lucide-react";

And update its usage:

- icon: Map,
+ icon: MapIcon,
🧰 Tools
🪛 Biome (1.9.4)

[error] 2-2: Do not shadow the global "Map" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

frontend/src/components/ContentProgress.tsx (1)

155-155: 🛠️ Refactor suggestion

Improve layout responsiveness

The fixed padding value of px-64 might cause layout issues on smaller screens. Consider using responsive utilities or relative units.

- className={`${!showSteps ? "py-14 px-64 bg-gray-50" : "p-0 bg-white"}`}
+ className={`${!showSteps ? "py-14 px-8 md:px-16 lg:px-32 xl:px-64 bg-gray-50" : "p-0 bg-white"}`}
🧹 Nitpick comments (20)
frontend/src/components/Icons.tsx (1)

3-16: Add accessibility attributes to the SVG icon

The SVG icon lacks accessibility attributes like aria-hidden and role, which are important for screen readers.

<svg
  xmlns="http://www.w3.org/2000/svg"
  width="24"
  height="24"
  viewBox="0 0 24 24"
  fill="none"
+ aria-hidden="true"
+ role="img"
+ aria-label="Arrow down icon"
>
  <path
    d="M4 22H20C20.5304 22 21.0391 21.7893 21.4142 21.4142C21.7893 21.0391 22 20.5304 22 20V4C22 3.46957 21.7893 2.96086 21.4142 2.58579C21.0391 2.21071 20.5304 2 20 2H8C7.46957 2 6.96086 2.21071 6.58579 2.58579C6.21071 2.96086 6 3.46957 6 4V20C6 20.5304 5.78929 21.0391 5.41421 21.4142C5.03914 21.7893 4.53043 22 4 22ZM4 22C3.46957 22 2.96086 21.7893 2.58579 21.4142C2.21071 21.0391 2 20.5304 2 20V11C2 9.9 2.9 9 4 9H6M18 14H10M15 18H10M10 6H18V10H10V6Z"
    stroke="#020617"
    strokeLinecap="round"
    strokeLinejoin="round"
  />
</svg>
frontend/src/components/ContentApprovers.tsx (4)

5-13: Add TypeScript interface for approver data structure

The approver data structure is used without a TypeScript interface, which reduces type safety.

+interface Approver {
+  id: number;
+  name: string;
+  handle: string;
+}

export default function ContentApprovers() {
-  const [approvers, setApprovers] = useState([
+  const [approvers, setApprovers] = useState<Approver[]>([
    { id: 1, name: "Cuppy Cupperson", handle: "djcuppy" },
    { id: 2, name: "John Smith", handle: "jsmith" },
  ]);

  const handleDeleteApprover = (id: number) => {
    setApprovers(approvers.filter((approver) => approver.id !== id));
  };

46-59: Add accessibility attributes to the Twitter icon SVG

The Twitter icon SVG lacks accessibility attributes, which makes it less accessible for users with screen readers.

<svg
  xmlns="http://www.w3.org/2000/svg"
  width="14"
  height="14"
  viewBox="0 0 14 14"
  fill="none"
+ aria-hidden="true"
+ role="img"
+ aria-label="Twitter icon"
>
  <path
    d="M10.3494 1.75H12.1299L8.24098 6.22457L12.8327 12.2922H9.22492L6.41367 8.61412L3.18074 12.2922H1.40029L5.5703 7.51305L1.16602 1.75H4.86749L7.42104 5.12349L10.3494 1.75ZM9.71689 11.2145H10.7008L4.32867 2.75736H3.25102L9.71689 11.2145Z"
    fill="#020617"
  />
</svg>

61-81: Consider adding confirmation dialog before deletion

The delete functionality currently doesn't include a confirmation dialog, which could lead to accidental deletions.

Consider adding a confirmation step before deleting an approver:

<Button
  variant="ghost"
  size="default"
  className="text-gray-400 hover:text-red-500"
- onClick={() => handleDeleteApprover(approver.id)}
+ onClick={() => {
+   if (confirm(`Are you sure you want to remove ${approver.name}?`)) {
+     handleDeleteApprover(approver.id);
+   }
+ }}
>

16-85: Consider extracting approver card into a separate component

The JSX for rendering each approver is quite lengthy and could be extracted into a separate component to improve readability and maintainability.

Create a new component like ApproverCard:

interface ApproverCardProps {
  approver: Approver;
  onDelete: (id: number) => void;
}

function ApproverCard({ approver, onDelete }: ApproverCardProps) {
  return (
    <div
      key={approver.id}
      className="flex items-center justify-between py-3 px-4 border border-neutral-400 rounded-lg bg-neutral-50"
    >
      {/* Component content... */}
    </div>
  );
}

Then use it in the main component:

<div className="space-y-3 mt-6">
  {approvers.map((approver) => (
-    <div
-      key={approver.id}
-      className="flex items-center justify-between py-3 px-4 border border-neutral-400 rounded-lg bg-neutral-50"
-    >
-      {/* ... all the approver card content ... */}
-    </div>
+    <ApproverCard 
+      key={approver.id}
+      approver={approver} 
+      onDelete={handleDeleteApprover} 
+    />
  ))}
</div>
frontend/src/components/content-progress/JsonEditor.tsx (2)

12-12: Default value logic could be improved

The current implementation uses the OR operator to provide a default value, but this approach doesn't handle empty strings correctly.

-      value={jsonContent || `{\n  "template": ""\n}`}
+      value={jsonContent?.trim() ? jsonContent : `{\n  "template": ""\n}`}

1-17: Consider using a more feature-rich JSON editor

For editing JSON, consider using a dedicated library like react-json-editor-ajrm or monaco-editor that provides syntax highlighting, error checking, and auto-formatting.

This would improve the user experience significantly when working with complex JSON structures.

frontend/src/components/content-progress/EmptyState.tsx (1)

1-28: LGTM, just a few styling suggestions for consistency

The EmptyState component is well-structured and follows React's functional component pattern with proper props typing. The overall implementation is clean.

A few minor suggestions:

  • Consider replacing hardcoded color values like text-[#a3a3a3] with Tailwind's built-in text colors (e.g., text-neutral-400) for better theming consistency
  • There's some inconsistency between using font-base in one paragraph and font-normal in another
-        <p className="text-[#a3a3a3] text-center font-base font-bold leading-7">
+        <p className="text-neutral-400 text-center font-bold leading-7">
           No Processing Steps Added
         </p>
-        <p className="text-center text-base font-normal leading-7 text-[#a3a3a3]">
+        <p className="text-center text-base font-normal leading-7 text-neutral-400">
           Processing steps transform your content before publishing
         </p>
frontend/src/components/PublishIntegrations.tsx (4)

44-44: Fix empty font class

There's an empty font- class that should be removed.

-            <p className="text-lg font-semibold font-">Telegram</p>
+            <p className="text-lg font-semibold">Telegram</p>

37-38: React JSX attribute naming convention

In React JSX, SVG attributes should use camelCase naming convention.

-                  <stop stop-color="#37AEE2" />
-                  <stop offset="1" stop-color="#1E96C8" />
+                  <stop stopColor="#37AEE2" />
+                  <stop offset="1" stopColor="#1E96C8" />

58-64: React JSX attribute naming convention

The clip-path and related attributes should use camelCase in React JSX.

-                <g clip-path="url(#clip0_2539_9441)">
+                <g clipPath="url(#clip0_2539_9441)">
                   <path
                     d="M12.0607 6.91406C12.6909 7.14901 13.2517 7.53908 13.6912 8.0482C14.1307 8.55731 14.4348 9.16902 14.5752 9.82677C14.7157 10.4845 14.688 11.1671 14.4947 11.8113C14.3015 12.4555 13.9489 13.0406 13.4697 13.5125C12.9904 13.9843 12.3999 14.3277 11.7527 14.5109C11.1055 14.694 10.4226 14.7111 9.76717 14.5604C9.11169 14.4097 8.50479 14.0961 8.0026 13.6487C7.5004 13.2013 7.11913 12.6345 6.89404 12.0007M4.66732 4.00065H5.33398V6.66732M11.1407 9.25391L11.6074 9.72724L9.72738 11.6072M9.33398 5.33398C9.33398 7.54312 7.54312 9.33398 5.33398 9.33398C3.12485 9.33398 1.33398 7.54312 1.33398 5.33398C1.33398 3.12485 3.12485 1.33398 5.33398 1.33398C7.54312 1.33398 9.33398 3.12485 9.33398 5.33398Z"
-                    stroke="#525252"
-                    stroke-linecap="round"
-                    stroke-linejoin="round"
+                    stroke="#525252"
+                    strokeLinecap="round"
+                    strokeLinejoin="round"

83-83: Remove empty className

There's an empty className property that can be removed.

-      <div className=" ">
+      <div>
frontend/src/components/content-progress/TemplateElement.tsx (1)

1-34: LGTM, consider adding accessibility improvements

The TemplateElement component is well-structured with proper TypeScript typing and follows React best practices. The implementation is clean and the component has a clear single responsibility.

To enhance accessibility, consider adding a few ARIA attributes and ensuring the keyboard interaction is optimal.

       <Checkbox
         id={element.id}
         checked={isSelected}
         onCheckedChange={() => onToggle(element.id)}
-        className="w-4 h-4 fill-black opacity-50"
+        className="w-4 h-4 fill-black opacity-50"
+        aria-label={`Select ${element.title}`}
       />
frontend/src/components/ui/switch.tsx (1)

4-4: Consider using relative imports for better reliability

The import is using an absolute path which might cause issues depending on the project's import configuration.

-import { cn } from "src/lib/utils";
+import { cn } from "../../lib/utils";
frontend/src/components/ui/checkbox.tsx (1)

7-25: Consider breaking down the long className for better readability.

The className on line 14 contains many Tailwind classes in a single line. Consider breaking this into multiple lines or using a more structured approach with Tailwind variants to improve readability and maintainability.

  className={cn(
-    "peer h-4 w-4 shrink-0 rounded-sm border border-neutral-200 border-neutral-900 shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-neutral-950 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-neutral-900 data-[state=checked]:text-neutral-50 dark:border-neutral-800 dark:border-neutral-50 dark:focus-visible:ring-neutral-300 dark:data-[state=checked]:bg-neutral-50 dark:data-[state=checked]:text-neutral-900",
+    "peer h-4 w-4 shrink-0 rounded-sm border border-neutral-200 border-neutral-900 shadow",
+    "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-neutral-950", 
+    "disabled:cursor-not-allowed disabled:opacity-50",
+    "data-[state=checked]:bg-neutral-900 data-[state=checked]:text-neutral-50",
+    "dark:border-neutral-800 dark:border-neutral-50 dark:focus-visible:ring-neutral-300",
+    "dark:data-[state=checked]:bg-neutral-50 dark:data-[state=checked]:text-neutral-900",
    className,
  )}
frontend/src/components/CurationSettingsForm.tsx (1)

44-46: Remove unnecessary empty lines.

There are empty lines within the step objects that can be removed for better readability and consistency.

  {
    title: "Publishing Integrations",
    description: "Define how content is processed before being published",
-
    id: 2,
    component: <PublishingIntegrations />,
  },
  {
    title: "Content Approvers",
    description: "Define how content is processed before being published",
-
    id: 3,
    component: <ContentApprovers />,
  },
  {
    title: "Submission Rules",
    description: "Define how content is processed before being published",
-
    id: 4,
    component: <SubmissionRules />,
  },

Also applies to: 51-53, 58-60

frontend/src/components/content-progress/StepItem.tsx (2)

32-32: Fix missing space in className.

There's a missing space in the className value.

-          <div className="p-2rounded-md">{icon}</div>
+          <div className="p-2 rounded-md">{icon}</div>

38-38: Fix typo in className.

There's a typo in the className value.

-            <p className="text-sm text-[#525252] leadiong-5">{description}</p>
+            <p className="text-sm text-[#525252] leading-5">{description}</p>
frontend/src/components/content-progress/VisualEditor.tsx (2)

19-27: Add error handling to preview generation

The preview generation doesn't handle the case where a selected element ID might not exist in templateElements. Consider adding a fallback.

return selectedElements
-  .map((id) => templateElements.find((el) => el.id === id)?.template || "")
+  .map((id) => {
+    const template = templateElements.find((el) => el.id === id)?.template;
+    if (!template) {
+      console.warn(`Template element with id "${id}" not found`);
+      return "";
+    }
+    return template;
+  })
  .join("\n");

56-58: Add a minimum height for empty previews

When no elements are selected, the preview container might appear too small. Consider adding a minimum height for better user experience.

- <div className="bg-neutral-100 border-neutral-300 border py-[6px] px-[14px] rounded-lg min-h-fit whitespace-pre-line font-mono text-sm">
+ <div className="bg-neutral-100 border-neutral-300 border py-[6px] px-[14px] rounded-lg min-h-[100px] whitespace-pre-line font-mono text-sm">
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 482e6c8 and 9901b52.

⛔ Files ignored due to path filters (1)
  • frontend/bun.lock is excluded by !**/*.lock
📒 Files selected for processing (16)
  • frontend/package.json (2 hunks)
  • frontend/src/components/ContentApprovers.tsx (1 hunks)
  • frontend/src/components/ContentProgress.tsx (1 hunks)
  • frontend/src/components/CurationFormSteps.tsx (1 hunks)
  • frontend/src/components/CurationSettingsForm.tsx (1 hunks)
  • frontend/src/components/Icons.tsx (1 hunks)
  • frontend/src/components/PublishIntegrations.tsx (1 hunks)
  • frontend/src/components/content-progress/EmptyState.tsx (1 hunks)
  • frontend/src/components/content-progress/JsonEditor.tsx (1 hunks)
  • frontend/src/components/content-progress/StepItem.tsx (1 hunks)
  • frontend/src/components/content-progress/TemplateElement.tsx (1 hunks)
  • frontend/src/components/content-progress/VisualEditor.tsx (1 hunks)
  • frontend/src/components/content-progress/data.ts (1 hunks)
  • frontend/src/components/content-progress/types.ts (1 hunks)
  • frontend/src/components/ui/checkbox.tsx (1 hunks)
  • frontend/src/components/ui/switch.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/components/CurationFormSteps.tsx
🧰 Additional context used
🧬 Code Graph Analysis (8)
frontend/src/components/content-progress/types.ts (2)
frontend/src/components/content-progress/TemplateElement.tsx (1)
  • TemplateElement (10-34)
frontend/src/components/content-progress/data.ts (2)
  • TemplateElement (5-10)
  • Step (53-57)
frontend/src/components/PublishIntegrations.tsx (2)
frontend/src/components/ui/switch.tsx (1)
  • Switch (27-27)
frontend/src/components/ui/button.tsx (1)
  • Button (58-58)
frontend/src/components/ui/switch.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/content-progress/data.ts (2)
frontend/src/components/content-progress/TemplateElement.tsx (1)
  • TemplateElement (10-34)
frontend/src/components/content-progress/types.ts (2)
  • TemplateElement (3-8)
  • Step (10-15)
frontend/src/components/ContentProgress.tsx (5)
frontend/src/components/content-progress/data.ts (2)
  • templateElements (13-50)
  • stepDefinitions (60-78)
frontend/src/components/content-progress/VisualEditor.tsx (1)
  • VisualEditor (13-69)
frontend/src/components/content-progress/JsonEditor.tsx (1)
  • JsonEditor (8-17)
frontend/src/components/content-progress/EmptyState.tsx (1)
  • EmptyState (8-28)
frontend/src/components/content-progress/StepItem.tsx (1)
  • StepItem (14-47)
frontend/src/components/ui/checkbox.tsx (1)
frontend/src/lib/utils.ts (1)
  • cn (4-6)
frontend/src/components/content-progress/JsonEditor.tsx (1)
frontend/src/components/ui/textarea.tsx (1)
  • Textarea (22-22)
frontend/src/components/ContentApprovers.tsx (1)
frontend/src/components/ui/button.tsx (1)
  • Button (58-58)
🪛 Biome (1.9.4)
frontend/src/components/content-progress/data.ts

[error] 2-2: Do not shadow the global "Map" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

🔇 Additional comments (12)
frontend/src/components/Icons.tsx (1)

1-18: LGTM! Organization of icons in a single object is a good practice

The approach of organizing icons in a centralized object is a good practice for maintainability and consistency. This structure will make it easy to add more icons in the future.

frontend/src/components/content-progress/types.ts (2)

3-8: LGTM! Clear and well-structured interface definition

The TemplateElement interface is well-defined with clear property names and appropriate types.


10-15:

Details

❓ Verification inconclusive

Inconsistency in Step interface definition compared to other files

The Step interface defines icon as ReactNode, but according to the relevant code snippets, it's defined as React.ComponentType in other files. Additionally, the content property here is not present in the other implementation.

Consider reviewing and aligning these interfaces to ensure consistency across the codebase:


🏁 Script executed:

#!/bin/bash
# Check for inconsistent Step interface usage
rg -A 2 -B 2 "interface Step" --type typescript
rg -A 5 -B 0 "Step.*{" --type typescript

Length of output: 205


Action Required: Verify and Align Step Interface Definition

It appears that the Step interface in
frontend/src/components/content-progress/types.ts
defines the icon property as ReactNode and includes a content property—whereas other parts of the codebase use React.ComponentType for icon and do not include a content property. Our initial verification attempt using ripgrep encountered regex errors. To gather clearer evidence, please re-run the following corrected shell scripts and manually verify the consistency of the Step interface across your files:

#!/bin/bash
# Search for all Step interface definitions in TS and TSX files
rg -A 2 -B 2 "export interface Step" -g "*.ts" -g "*.tsx"

echo "-------------"

# Check usage of the 'icon' property to inspect type differences
rg -n "icon:" -g "*.ts" -g "*.tsx"

Next Steps:

  • In frontend/src/components/content-progress/types.ts, consider changing icon: ReactNode to icon: React.ComponentType if that aligns with the other implementations.
  • Evaluate whether the extra content property is necessary; if it’s not part of the standard interface, remove it to maintain consistency.

Please verify these points and adjust accordingly.

frontend/src/components/ContentApprovers.tsx (1)

20-22: Description text doesn't match functionality

The description text "Generate Twitter threads from curated content" doesn't appear to match the functionality of managing content approvers.

Please verify if this description accurately reflects the purpose of content approvers or if it should be updated to better describe their role.

frontend/src/components/content-progress/JsonEditor.tsx (1)

3-6: LGTM! Well-defined TypeScript interface

The props interface is clearly defined with appropriate types.

frontend/src/components/ui/switch.tsx (1)

6-24: Well-implemented Switch component with comprehensive state handling

The Switch component implementation is solid, following React's forwardRef pattern correctly and properly handling all the UI states (checked, unchecked, disabled, focused). The component leverages Radix UI's accessible foundation which ensures good keyboard navigation and screen reader support.

frontend/src/components/ui/checkbox.tsx (1)

1-28: Well-structured Checkbox component that follows best practices.

This implementation of a Checkbox component using Radix UI primitives is well-structured. It properly uses React.forwardRef, handles component props appropriately, and sets the displayName for better debugging.

frontend/package.json (1)

13-46: Good selection of dependencies for form handling and UI components.

The added dependencies are appropriate for creating form-based UIs with validation:

  • @hookform/resolvers and zod for form validation
  • Various Radix UI components for accessible UI elements
  • react-hook-form for form state management

These are well-maintained libraries that will help create a robust Feed Page interface.

frontend/src/components/CurationSettingsForm.tsx (2)

83-85: SubmissionRules component is a placeholder.

The SubmissionRules component is currently a minimal placeholder. Ensure you implement the actual functionality for this component to match the requirements for the Feed Page feature.

Is there a ticket or design document that specifies what should be included in the SubmissionRules component?


6-26: Well-extracted StepHeader component.

Good job extracting the StepHeader into a separate component. This promotes reusability and keeps the main component clean.

frontend/src/components/content-progress/data.ts (1)

13-50: Template elements look good

The template elements array is well structured with clear identifiers and templates that use a consistent formatting style.

frontend/src/components/content-progress/VisualEditor.tsx (1)

13-17: Good use of memoization

The use of memo here is appropriate for optimizing component rendering, especially since the component might re-render frequently as selections change.

@elliotBraem elliotBraem merged commit cf66339 into staging Apr 11, 2025
3 of 4 checks passed
@elliotBraem elliotBraem deleted the feat/curation-engine branch April 11, 2025 06:18
@coderabbitai coderabbitai bot mentioned this pull request Apr 28, 2025
elliotBraem added a commit that referenced this pull request Jun 10, 2025
* Get basic working (#109)

* Get basic working

* adds rss feeds

* added stablewatch founder and stablecoin intern from messaria as approvers on stablecoins feed

* fixes to config for grants, sui, and telegram channels (#102)

* add query param for selective processing (#103)

* adds query param to process

* add query param for processing

* simplify

* add tags

* Feat: implement frontend leaderboard (#93)

* feat: implement frontend leaderboard

* feat: implement a leaderboard in frontend

* feat: implemented leaderboard

* fix: rebuild implement leaderboard

* fix: prettier

* fix: prettier

* fix: reimplement frontend leaderboard

* fix: implement frontend leaderboard

* approval rate

* sets approval rate and hides curator

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* remove tailwind-scrollbar

* added bob to desci feed

* Get basic working

* set .env.example

* nitpicks

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@everything.dev>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>

* fix polyfills

* Explore Page (#108)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header + Explore Page Style (#113)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header Updates + Web3Auth getUserInfo + Explore Page changes

* fmt

* coderabbit comments resolved

* Profile page (#120)

* Update the FE to have the profile page (header and tabs init)

* Move tabs to it's own component

* Add stats and top badges to overview

* Finish the overview tab

* Update overview page and init content page

* feat(profile-page): add Content and My Feed tags

* feat(profile-page): finish profile page static UI

* refactor: fmt

* [FEATURE] Create Feed Page - DRAFT (#121)

* Curate Engine Step 1

* content-progress-configuration step-1

* Curation Settings Part 2 and 3

* CodeRabbit Comments Resolved + Mobile Responsive

* Responsiveness: empty State, JSON check

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* update to main

* fmt

* Feat/submissions page (#127)

* Submissions Page + Feed Page + Mobile Responsiveness

* fixes

* craete-feed authenticated user condition

* fmt

* remove sqlite

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* Feed Page Tabs (#130)

* set tanstack routes (#132)

* [Task]: Add connect button to feed page  (#131)

* feat: Add connect button to feed page

* fix: recommit

* added back to stablecoins feed since stablewatch forked their own

* fix packages, update pg, and ignore cloudflare sockets

* fmt

---------

Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* uses prod data

* Update changes to latest staging

* Revert "Update changes to latest staging"

This reverts commit cd12908.

* Fix Sort By Oldest (#136)

* fix: Sort By Oldest

* fix: Sort By Oldest

* fix: Fix RecentSubmissions Sort Order Update

* fix: All feed should be hidden, remove double title

---------

Co-authored-by: vohuunhan1310@gmail.com <ethanclark1310@gmail.com>

* UI fixes (#138)

* UI fixes

* fmt

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* Fix: Leaderboard improvements (#140)

* fix: Leaderboard improvements

* fix: fmt

* reorganize

* remove unused

* rename

* clean up

* fmt

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* clean up

* wallet wip

* todo

* auth flow, wip

* types clean up

* fix types

* login modal wip

* modals

* controller, service, successful create account

* clean with data, metadata, and pattern, validation, and json schema

* add migration doc

* add activity and delete user

* fix migration

* add seed remote method

* fix naming

* fix script call

* file extension

* remove build schema

* proper build time

* fix Dockerfile

* rsbuild

* Standard Header Component + Responsivenss Fixes (#146)

* Standard Header Component + Responsivenss Fixes

* fmt

* rename Hero

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* fix broken link

* don't distribute on staging

* fix path

* env log

* comment out

* railway env

* fix: Profile adjustments (#153)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* Login Modal Fixes (#154)

* Login Modal Fixes

* Resolve Comments

* container

* container fixes

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* organize

* fmt

* update feeds (#156)

* Leaderboard width fixes

* feat: save profile image to pinata (#158)

* feat(fe): save profile image to pinata

* fix: fix comment

* Feat Integrate NEAR Solana, Ethereum wallet selection (#159)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* feat: Integrate NEAR wallet selection

* fix: run fmt

* fix: add function create accesstokenpayload use wallet selector near

* fix: resolve conversation

* Feed Submission + Feed Review Page (#160)

* Feed Review Page and Feed Creation

* fmt

* coderabbit comments resolved

* comments resolved

* comments resolved

* reset routeTree

* minor fixes (#164)

* minor fixes

* fmt

* remove node-compile-cache

* reuse user menu

* header clean up

* remove how it works

* clean up

* set submissions at root route

* fmt

* clean

* create is coming soon

* clean up

* user link

* Adds caddyfile and frontend clean up (#165)

* removes serve static from backend

* fmt

* fix build

* adds caddyfile

* clean up submission feed

* pnpm lock

* fix turbo

* fix build

* db migration

* without time zone

* cleans up submission list

* Adds shared-db, types package, initial migration (#166)

* init

* upgrade tsconfigs

* shared-db build

* shared-db wip

* transfer getAllSubmissions

* hooked up

* moves to shared-db

* fmt

* update dockerfile

* monorepo

* working build

* migration service

* turbo

* install pnpm

* temp proxy

* no include request headers

* clean up

* proper path

* renaming

* fmt

* update caddyfile

* different strategy

* use route

* fix BACKEND to API

* ignore temp

* temp remove

* back to orig

* turn on auto https

* disable

* route block

* clean up

* configure host

* favicon

* add staging domain

* http:

* set domain adn host

* correct bash

* matching host

* Adds edit feed and image upload (#168)

* adds page

* image upload and edit feed

* update pnpm lock

* CSR

* vercel json

* move

* temp disable auth

* set image

* fix query

* submisison service running

* Migrates submission service, is running (#169)

* init

* wip

* clean up

* feed list clean up

* break up functions

* fix config path

* adds plugins route and integrates with plugin service

* remote curate.config.json

* plugins table

* adds plugin pages

* set type

* fix feed types

* plguin errors

* env injection

* fix queries

* fix migration

* fix migration

* fix migration

* redo migration

* decouples moderation

* fix status

* fix feeds

* hide moderation actions

---------

Co-authored-by: Zeeshan Ahmad <itexpert120@outlook.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>
Co-authored-by: Muhammad Saad Iqbal <saadiqbal.dev@outlook.com>
Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: dungpt82 <69756171+dungpt99@users.noreply.github.com>
elliotBraem added a commit that referenced this pull request Jun 10, 2025
* Get basic working (#109)

* Get basic working

* adds rss feeds

* added stablewatch founder and stablecoin intern from messaria as approvers on stablecoins feed

* fixes to config for grants, sui, and telegram channels (#102)

* add query param for selective processing (#103)

* adds query param to process

* add query param for processing

* simplify

* add tags

* Feat: implement frontend leaderboard (#93)

* feat: implement frontend leaderboard

* feat: implement a leaderboard in frontend

* feat: implemented leaderboard

* fix: rebuild implement leaderboard

* fix: prettier

* fix: prettier

* fix: reimplement frontend leaderboard

* fix: implement frontend leaderboard

* approval rate

* sets approval rate and hides curator

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* remove tailwind-scrollbar

* added bob to desci feed

* Get basic working

* set .env.example

* nitpicks

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@everything.dev>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>

* fix polyfills

* Explore Page (#108)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header + Explore Page Style (#113)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header Updates + Web3Auth getUserInfo + Explore Page changes

* fmt

* coderabbit comments resolved

* Profile page (#120)

* Update the FE to have the profile page (header and tabs init)

* Move tabs to it's own component

* Add stats and top badges to overview

* Finish the overview tab

* Update overview page and init content page

* feat(profile-page): add Content and My Feed tags

* feat(profile-page): finish profile page static UI

* refactor: fmt

* [FEATURE] Create Feed Page - DRAFT (#121)

* Curate Engine Step 1

* content-progress-configuration step-1

* Curation Settings Part 2 and 3

* CodeRabbit Comments Resolved + Mobile Responsive

* Responsiveness: empty State, JSON check

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* update to main

* fmt

* Feat/submissions page (#127)

* Submissions Page + Feed Page + Mobile Responsiveness

* fixes

* craete-feed authenticated user condition

* fmt

* remove sqlite

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* Feed Page Tabs (#130)

* set tanstack routes (#132)

* [Task]: Add connect button to feed page  (#131)

* feat: Add connect button to feed page

* fix: recommit

* added back to stablecoins feed since stablewatch forked their own

* fix packages, update pg, and ignore cloudflare sockets

* fmt

---------

Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* uses prod data

* Update changes to latest staging

* Revert "Update changes to latest staging"

This reverts commit cd12908.

* Fix Sort By Oldest (#136)

* fix: Sort By Oldest

* fix: Sort By Oldest

* fix: Fix RecentSubmissions Sort Order Update

* fix: All feed should be hidden, remove double title

---------

Co-authored-by: vohuunhan1310@gmail.com <ethanclark1310@gmail.com>

* UI fixes (#138)

* UI fixes

* fmt

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* Fix: Leaderboard improvements (#140)

* fix: Leaderboard improvements

* fix: fmt

* reorganize

* remove unused

* rename

* clean up

* fmt

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* clean up

* wallet wip

* todo

* auth flow, wip

* types clean up

* fix types

* login modal wip

* modals

* controller, service, successful create account

* clean with data, metadata, and pattern, validation, and json schema

* add migration doc

* add activity and delete user

* fix migration

* add seed remote method

* fix naming

* fix script call

* file extension

* remove build schema

* proper build time

* fix Dockerfile

* rsbuild

* Standard Header Component + Responsivenss Fixes (#146)

* Standard Header Component + Responsivenss Fixes

* fmt

* rename Hero

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* fix broken link

* don't distribute on staging

* fix path

* env log

* comment out

* railway env

* fix: Profile adjustments (#153)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* Login Modal Fixes (#154)

* Login Modal Fixes

* Resolve Comments

* container

* container fixes

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* organize

* fmt

* update feeds (#156)

* Leaderboard width fixes

* feat: save profile image to pinata (#158)

* feat(fe): save profile image to pinata

* fix: fix comment

* Feat Integrate NEAR Solana, Ethereum wallet selection (#159)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* feat: Integrate NEAR wallet selection

* fix: run fmt

* fix: add function create accesstokenpayload use wallet selector near

* fix: resolve conversation

* Feed Submission + Feed Review Page (#160)

* Feed Review Page and Feed Creation

* fmt

* coderabbit comments resolved

* comments resolved

* comments resolved

* reset routeTree

* minor fixes (#164)

* minor fixes

* fmt

* remove node-compile-cache

* reuse user menu

* header clean up

* remove how it works

* clean up

* set submissions at root route

* fmt

* clean

* create is coming soon

* clean up

* user link

* Adds caddyfile and frontend clean up (#165)

* removes serve static from backend

* fmt

* fix build

* adds caddyfile

* clean up submission feed

* pnpm lock

* fix turbo

* fix build

* db migration

* without time zone

* cleans up submission list

* Adds shared-db, types package, initial migration (#166)

* init

* upgrade tsconfigs

* shared-db build

* shared-db wip

* transfer getAllSubmissions

* hooked up

* moves to shared-db

* fmt

* update dockerfile

* monorepo

* working build

* migration service

* turbo

* install pnpm

* temp proxy

* no include request headers

* clean up

* proper path

* renaming

* fmt

* update caddyfile

* different strategy

* use route

* fix BACKEND to API

* ignore temp

* temp remove

* back to orig

* turn on auto https

* disable

* route block

* clean up

* configure host

* favicon

* add staging domain

* http:

* set domain adn host

* correct bash

* matching host

* Adds edit feed and image upload (#168)

* adds page

* image upload and edit feed

* update pnpm lock

* CSR

* vercel json

* move

* temp disable auth

* set image

* fix query

* submisison service running

* Migrates submission service, is running (#169)

* init

* wip

* clean up

* feed list clean up

* break up functions

* fix config path

* adds plugins route and integrates with plugin service

* remote curate.config.json

* plugins table

* adds plugin pages

* set type

* fix feed types

* plguin errors

* env injection

* fix queries

* fix migration

* fix migration

* fix migration

* redo migration

* decouples moderation

* fix status

* fix feeds

* hide moderation actions

* adds overwrite script

* migrate timestamps

* better date handling

---------

Co-authored-by: Zeeshan Ahmad <itexpert120@outlook.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>
Co-authored-by: Muhammad Saad Iqbal <saadiqbal.dev@outlook.com>
Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: dungpt82 <69756171+dungpt99@users.noreply.github.com>
elliotBraem added a commit that referenced this pull request Jun 10, 2025
* Get basic working (#109)

* Get basic working

* adds rss feeds

* added stablewatch founder and stablecoin intern from messaria as approvers on stablecoins feed

* fixes to config for grants, sui, and telegram channels (#102)

* add query param for selective processing (#103)

* adds query param to process

* add query param for processing

* simplify

* add tags

* Feat: implement frontend leaderboard (#93)

* feat: implement frontend leaderboard

* feat: implement a leaderboard in frontend

* feat: implemented leaderboard

* fix: rebuild implement leaderboard

* fix: prettier

* fix: prettier

* fix: reimplement frontend leaderboard

* fix: implement frontend leaderboard

* approval rate

* sets approval rate and hides curator

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* remove tailwind-scrollbar

* added bob to desci feed

* Get basic working

* set .env.example

* nitpicks

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@everything.dev>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>

* fix polyfills

* Explore Page (#108)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header + Explore Page Style (#113)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header Updates + Web3Auth getUserInfo + Explore Page changes

* fmt

* coderabbit comments resolved

* Profile page (#120)

* Update the FE to have the profile page (header and tabs init)

* Move tabs to it's own component

* Add stats and top badges to overview

* Finish the overview tab

* Update overview page and init content page

* feat(profile-page): add Content and My Feed tags

* feat(profile-page): finish profile page static UI

* refactor: fmt

* [FEATURE] Create Feed Page - DRAFT (#121)

* Curate Engine Step 1

* content-progress-configuration step-1

* Curation Settings Part 2 and 3

* CodeRabbit Comments Resolved + Mobile Responsive

* Responsiveness: empty State, JSON check

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* update to main

* fmt

* Feat/submissions page (#127)

* Submissions Page + Feed Page + Mobile Responsiveness

* fixes

* craete-feed authenticated user condition

* fmt

* remove sqlite

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* Feed Page Tabs (#130)

* set tanstack routes (#132)

* [Task]: Add connect button to feed page  (#131)

* feat: Add connect button to feed page

* fix: recommit

* added back to stablecoins feed since stablewatch forked their own

* fix packages, update pg, and ignore cloudflare sockets

* fmt

---------

Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* uses prod data

* Update changes to latest staging

* Revert "Update changes to latest staging"

This reverts commit cd12908.

* Fix Sort By Oldest (#136)

* fix: Sort By Oldest

* fix: Sort By Oldest

* fix: Fix RecentSubmissions Sort Order Update

* fix: All feed should be hidden, remove double title

---------

Co-authored-by: vohuunhan1310@gmail.com <ethanclark1310@gmail.com>

* UI fixes (#138)

* UI fixes

* fmt

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* Fix: Leaderboard improvements (#140)

* fix: Leaderboard improvements

* fix: fmt

* reorganize

* remove unused

* rename

* clean up

* fmt

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* clean up

* wallet wip

* todo

* auth flow, wip

* types clean up

* fix types

* login modal wip

* modals

* controller, service, successful create account

* clean with data, metadata, and pattern, validation, and json schema

* add migration doc

* add activity and delete user

* fix migration

* add seed remote method

* fix naming

* fix script call

* file extension

* remove build schema

* proper build time

* fix Dockerfile

* rsbuild

* Standard Header Component + Responsivenss Fixes (#146)

* Standard Header Component + Responsivenss Fixes

* fmt

* rename Hero

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* fix broken link

* don't distribute on staging

* fix path

* env log

* comment out

* railway env

* fix: Profile adjustments (#153)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* Login Modal Fixes (#154)

* Login Modal Fixes

* Resolve Comments

* container

* container fixes

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* organize

* fmt

* update feeds (#156)

* Leaderboard width fixes

* feat: save profile image to pinata (#158)

* feat(fe): save profile image to pinata

* fix: fix comment

* Feat Integrate NEAR Solana, Ethereum wallet selection (#159)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* feat: Integrate NEAR wallet selection

* fix: run fmt

* fix: add function create accesstokenpayload use wallet selector near

* fix: resolve conversation

* Feed Submission + Feed Review Page (#160)

* Feed Review Page and Feed Creation

* fmt

* coderabbit comments resolved

* comments resolved

* comments resolved

* reset routeTree

* minor fixes (#164)

* minor fixes

* fmt

* remove node-compile-cache

* reuse user menu

* header clean up

* remove how it works

* clean up

* set submissions at root route

* fmt

* clean

* create is coming soon

* clean up

* user link

* Adds caddyfile and frontend clean up (#165)

* removes serve static from backend

* fmt

* fix build

* adds caddyfile

* clean up submission feed

* pnpm lock

* fix turbo

* fix build

* db migration

* without time zone

* cleans up submission list

* Adds shared-db, types package, initial migration (#166)

* init

* upgrade tsconfigs

* shared-db build

* shared-db wip

* transfer getAllSubmissions

* hooked up

* moves to shared-db

* fmt

* update dockerfile

* monorepo

* working build

* migration service

* turbo

* install pnpm

* temp proxy

* no include request headers

* clean up

* proper path

* renaming

* fmt

* update caddyfile

* different strategy

* use route

* fix BACKEND to API

* ignore temp

* temp remove

* back to orig

* turn on auto https

* disable

* route block

* clean up

* configure host

* favicon

* add staging domain

* http:

* set domain adn host

* correct bash

* matching host

* Adds edit feed and image upload (#168)

* adds page

* image upload and edit feed

* update pnpm lock

* CSR

* vercel json

* move

* temp disable auth

* set image

* fix query

* submisison service running

* Migrates submission service, is running (#169)

* init

* wip

* clean up

* feed list clean up

* break up functions

* fix config path

* adds plugins route and integrates with plugin service

* remote curate.config.json

* plugins table

* adds plugin pages

* set type

* fix feed types

* plguin errors

* env injection

* fix queries

* fix migration

* fix migration

* fix migration

* redo migration

* decouples moderation

* fix status

* fix feeds

* hide moderation actions

* adds overwrite script

* migrate timestamps

* better date handling

* fix

---------

Co-authored-by: Zeeshan Ahmad <itexpert120@outlook.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>
Co-authored-by: Muhammad Saad Iqbal <saadiqbal.dev@outlook.com>
Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: dungpt82 <69756171+dungpt99@users.noreply.github.com>
elliotBraem added a commit that referenced this pull request Jun 20, 2025
* Get basic working (#109)

* Get basic working

* adds rss feeds

* added stablewatch founder and stablecoin intern from messaria as approvers on stablecoins feed

* fixes to config for grants, sui, and telegram channels (#102)

* add query param for selective processing (#103)

* adds query param to process

* add query param for processing

* simplify

* add tags

* Feat: implement frontend leaderboard (#93)

* feat: implement frontend leaderboard

* feat: implement a leaderboard in frontend

* feat: implemented leaderboard

* fix: rebuild implement leaderboard

* fix: prettier

* fix: prettier

* fix: reimplement frontend leaderboard

* fix: implement frontend leaderboard

* approval rate

* sets approval rate and hides curator

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* remove tailwind-scrollbar

* added bob to desci feed

* Get basic working

* set .env.example

* nitpicks

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@everything.dev>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>

* fix polyfills

* Explore Page (#108)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header + Explore Page Style (#113)

* Explore Page - commit-1

* Explore Page - commit-2

* explore page - commit-3

* explore page - commit - 4

* explore page - commit - prettier

* explore page responsiveness + code Rabbit Comments

* code Rabbit Comments resolved

* css updates

* css changes 2

* header update + mobile responsive

* conflicts resolved

* Rebase and changes

* Fix fmt

* Header Updates + Web3Auth getUserInfo + Explore Page changes

* fmt

* coderabbit comments resolved

* Profile page (#120)

* Update the FE to have the profile page (header and tabs init)

* Move tabs to it's own component

* Add stats and top badges to overview

* Finish the overview tab

* Update overview page and init content page

* feat(profile-page): add Content and My Feed tags

* feat(profile-page): finish profile page static UI

* refactor: fmt

* [FEATURE] Create Feed Page - DRAFT (#121)

* Curate Engine Step 1

* content-progress-configuration step-1

* Curation Settings Part 2 and 3

* CodeRabbit Comments Resolved + Mobile Responsive

* Responsiveness: empty State, JSON check

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* update to main

* fmt

* Feat/submissions page (#127)

* Submissions Page + Feed Page + Mobile Responsiveness

* fixes

* craete-feed authenticated user condition

* fmt

* remove sqlite

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* Feed Page Tabs (#130)

* set tanstack routes (#132)

* [Task]: Add connect button to feed page  (#131)

* feat: Add connect button to feed page

* fix: recommit

* added back to stablecoins feed since stablewatch forked their own

* fix packages, update pg, and ignore cloudflare sockets

* fmt

---------

Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* uses prod data

* Update changes to latest staging

* Revert "Update changes to latest staging"

This reverts commit cd12908.

* Fix Sort By Oldest (#136)

* fix: Sort By Oldest

* fix: Sort By Oldest

* fix: Fix RecentSubmissions Sort Order Update

* fix: All feed should be hidden, remove double title

---------

Co-authored-by: vohuunhan1310@gmail.com <ethanclark1310@gmail.com>

* UI fixes (#138)

* UI fixes

* fmt

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* Fix: Leaderboard improvements (#140)

* fix: Leaderboard improvements

* fix: fmt

* reorganize

* remove unused

* rename

* clean up

* fmt

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* clean up

* wallet wip

* todo

* auth flow, wip

* types clean up

* fix types

* login modal wip

* modals

* controller, service, successful create account

* clean with data, metadata, and pattern, validation, and json schema

* add migration doc

* add activity and delete user

* fix migration

* add seed remote method

* fix naming

* fix script call

* file extension

* remove build schema

* proper build time

* fix Dockerfile

* rsbuild

* Standard Header Component + Responsivenss Fixes (#146)

* Standard Header Component + Responsivenss Fixes

* fmt

* rename Hero

---------

Co-authored-by: Elliot Braem <elliot@ejlbraem.com>

* fix broken link

* don't distribute on staging

* fix path

* env log

* comment out

* railway env

* fix: Profile adjustments (#153)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* Login Modal Fixes (#154)

* Login Modal Fixes

* Resolve Comments

* container

* container fixes

---------

Co-authored-by: Elliot Braem <elliot@everything.dev>

* organize

* fmt

* update feeds (#156)

* Leaderboard width fixes

* feat: save profile image to pinata (#158)

* feat(fe): save profile image to pinata

* fix: fix comment

* Feat Integrate NEAR Solana, Ethereum wallet selection (#159)

* fix: Leaderboard improvements

* fix: fmt

* fix: Profile adjustments

* fix: resolve conversation

* feat: Integrate NEAR wallet selection

* fix: run fmt

* fix: add function create accesstokenpayload use wallet selector near

* fix: resolve conversation

* Feed Submission + Feed Review Page (#160)

* Feed Review Page and Feed Creation

* fmt

* coderabbit comments resolved

* comments resolved

* comments resolved

* reset routeTree

* minor fixes (#164)

* minor fixes

* fmt

* remove node-compile-cache

* reuse user menu

* header clean up

* remove how it works

* clean up

* set submissions at root route

* fmt

* clean

* create is coming soon

* clean up

* user link

* Adds caddyfile and frontend clean up (#165)

* removes serve static from backend

* fmt

* fix build

* adds caddyfile

* clean up submission feed

* pnpm lock

* fix turbo

* fix build

* db migration

* without time zone

* cleans up submission list

* Adds shared-db, types package, initial migration (#166)

* init

* upgrade tsconfigs

* shared-db build

* shared-db wip

* transfer getAllSubmissions

* hooked up

* moves to shared-db

* fmt

* update dockerfile

* monorepo

* working build

* migration service

* turbo

* install pnpm

* temp proxy

* no include request headers

* clean up

* proper path

* renaming

* fmt

* update caddyfile

* different strategy

* use route

* fix BACKEND to API

* ignore temp

* temp remove

* back to orig

* turn on auto https

* disable

* route block

* clean up

* configure host

* favicon

* add staging domain

* http:

* set domain adn host

* correct bash

* matching host

* Adds edit feed and image upload (#168)

* adds page

* image upload and edit feed

* update pnpm lock

* CSR

* vercel json

* move

* temp disable auth

* set image

* fix query

* submisison service running

* Migrates submission service, is running (#169)

* init

* wip

* clean up

* feed list clean up

* break up functions

* fix config path

* adds plugins route and integrates with plugin service

* remote curate.config.json

* plugins table

* adds plugin pages

* set type

* fix feed types

* plguin errors

* env injection

* fix queries

* fix migration

* fix migration

* fix migration

* redo migration

* decouples moderation

* fix status

* fix feeds

* hide moderation actions

* adds overwrite script

* migrate timestamps

* better date handling

* fix

* Adds auth (#174)

* adds fastintear auth, init

* auth flow

* fmt

* adds fastintear auth, init

* auth flow

* fmt

* frontend auth

* auth middleware

* feed protection

* fmt

* moderation wip

* update lock

* migration

* moderation actions

* hide moderation actions

* hack

* fix flow

* enable hosted service

* adds user identities and connect platform

* create profile

* ensureUserExists

* set network for staging

* near account id

* auth provider id not null

* init near

* fix monorepo build

* fmt

* user clean up

* update moderation

* switch to crosspost connected

* fix user id and error

* server side

* moderation hooks

* cleaner logs

* Update apps/api/src/services/moderation.service.ts

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update apps/app/src/lib/near.ts

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update apps/app/src/lib/near.ts

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* adds feature flags and moderation service clean up

---------

Co-authored-by: Zeeshan Ahmad <itexpert120@outlook.com>
Co-authored-by: codingshot <45281667+codingshot@users.noreply.github.com>
Co-authored-by: Louis <112561517+louisdevzz@users.noreply.github.com>
Co-authored-by: Muhammad Saad Iqbal <saadiqbal.dev@outlook.com>
Co-authored-by: ethnclark <ethanclark1310@gmail.com>
Co-authored-by: dungpt82 <69756171+dungpt99@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Jun 21, 2025
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants