-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(web): finish website v1 #185
base: main
Are you sure you want to change the base?
Changes from all commits
32010b1
b5adda6
2594307
e7228d5
6a94965
aa7a700
7e35015
3f65d01
507488d
8dd526a
9dc47f0
dcec371
f503fb6
65650c3
dc0c4ff
4c30efd
dc95a27
9ec61a0
413c701
7f03481
e1343c9
2096740
e4a847a
cba7b1f
e0c54b8
22eb904
42a922f
8aa5d49
9fd7ed6
be79eed
14db181
1815200
dc555b8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,6 +50,7 @@ public/build | |
|
||
# Local Netlify folder | ||
.netlify | ||
deno.lock | ||
|
||
# Next.js | ||
.next | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
--- | ||
title: Bullet-Proof React | ||
description: WIP | ||
icon: ShieldCheck | ||
--- | ||
Comment on lines
+1
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update description before v1 release The description is marked as "WIP" (Work in Progress), but this PR is for the v1 release. Please provide a proper description that explains the purpose and benefits of Bullet-Proof React in your project. |
||
|
||
import { File, Folder, Files } from 'fumadocs-ui/components/files'; | ||
import { TbBrandTypescript } from "react-icons/tb"; | ||
|
||
## [Bullet-Proof React](https://reacthandbook.dev/project-standards) | ||
<iframe | ||
title="Bullet-Proof React" | ||
className="mt-4 w-full h-[400px] rounded-lg" | ||
src="https://reacthandbook.dev/project-standards" | ||
allowFullScreen> | ||
</iframe> | ||
|
||
Bullet-Proof React is a methodology for building scalable and maintainable front-end application, however, we extend it for our entire codebase. | ||
We use Bullet-Proof React and [Feature-Sliced Design](/concepts/feature-sliced-design) to create a scalable and maintainable codebase. | ||
|
||
In our use case, the Bullet-Proof React is how we organize our [Feature Slices](https://feature-sliced.design/docs/reference/slices-segments) | ||
Comment on lines
+18
to
+21
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Clarify the integration of methodologies The explanation of how Bullet-Proof React and Feature-Sliced Design work together is too vague. Please:
🧰 Tools🪛 LanguageTool[uncategorized] ~18-~18: The grammatical number of this noun doesn’t look right. Consider replacing it. (AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER) |
||
|
||
### Example structure | ||
<Files> | ||
<Folder name="features" defaultOpen> | ||
<Folder name="awesome-feature" defaultOpen> | ||
<Folder name="api"> | ||
</Folder> | ||
<Folder name="assets"> | ||
</Folder> | ||
<Folder name="entities"> | ||
</Folder> | ||
<Folder name="hooks"> | ||
</Folder> | ||
<Folder name="routes"> | ||
</Folder> | ||
<Folder name="stores"> | ||
</Folder> | ||
<Folder name="ui"> | ||
</Folder> | ||
<Folder name="utils"> | ||
</Folder> | ||
<File name="index.ts" icon={<TbBrandTypescript/>}/> | ||
</Folder> | ||
</Folder> | ||
</Files> | ||
Comment on lines
+1
to
+46
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Documentation needs improvement before v1 release
🔗 Analysis chainVerify documentation completeness for v1 release Since this is part of the website v1 release, please ensure:
🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Check for any missing documentation links or references
rg -l "TODO|FIXME|WIP" "apps/docs/content/docs/"
# Verify all referenced documentation files exist
rg -o "/concepts/[a-zA-Z0-9-]+" "apps/docs/content/docs/" | while read -r link; do
if [ ! -f "apps/docs/content/docs/${link#/}.mdx" ]; then
echo "Missing documentation: ${link}"
fi
done
Length of output: 3249 Script: #!/bin/bash
# Let's verify if the feature-sliced-design.mdx file exists and check its content
fd "feature-sliced-design.mdx" apps/docs/content/docs/
# Check the actual content of both files to verify integration points
cat apps/docs/content/docs/concepts/feature-sliced-design.mdx 2>/dev/null || echo "File not found"
cat apps/docs/content/docs/concepts/bullet-proof-react.mdx 2>/dev/null || echo "File not found"
# Check if there are any other references to these concepts
rg "Bullet-Proof React|Feature-Sliced Design" "apps/docs/content/docs/" -A 2 -B 2
Length of output: 10794 🧰 Tools🪛 LanguageTool[uncategorized] ~18-~18: The grammatical number of this noun doesn’t look right. Consider replacing it. (AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)
Comment on lines
+23
to
+46
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance example with practical details The folder structure example would be more helpful with:
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,107 @@ | ||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||
title: Feature-Sliced Design | ||||||||||||||||||||||||||||||||
description: WIP | ||||||||||||||||||||||||||||||||
icon: Eclipse | ||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||
Comment on lines
+1
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update the "WIP" description before v1 release. The frontmatter description is marked as "WIP" (Work in Progress), which should be completed before finalizing v1 of the website. Would you like help drafting a proper description that highlights the key aspects of Feature-Sliced Design? |
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
import { File, Folder, Files } from 'fumadocs-ui/components/files'; | ||||||||||||||||||||||||||||||||
import {Atom as TSX} from 'lucide-react' | ||||||||||||||||||||||||||||||||
import { DiJavascript1 } from "react-icons/di"; | ||||||||||||||||||||||||||||||||
import { TbBrandTypescript } from "react-icons/tb"; | ||||||||||||||||||||||||||||||||
import { BsFiletypeJson } from "react-icons/bs"; | ||||||||||||||||||||||||||||||||
import { DiCss3 } from "react-icons/di"; | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
We follow [Feature-Sliced Design](https://feature-sliced.design/docs) for our project structure. | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
<iframe | ||||||||||||||||||||||||||||||||
title="Feature-Sliced Design" | ||||||||||||||||||||||||||||||||
className="mt-4 w-full h-[400px] rounded-lg" | ||||||||||||||||||||||||||||||||
src="https://feature-sliced.design/docs" | ||||||||||||||||||||||||||||||||
allowFullScreen> | ||||||||||||||||||||||||||||||||
</iframe> | ||||||||||||||||||||||||||||||||
Comment on lines
+16
to
+21
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider security implications and accessibility of iframe usage. The iframe embedding external content:
Consider this alternative approach: <iframe
title="Feature-Sliced Design"
className="mt-4 w-full h-[400px] rounded-lg"
src="https://feature-sliced.design/docs"
+ sandbox="allow-scripts allow-same-origin allow-popups"
+ loading="lazy"
allowFullScreen>
+ <p>Unable to load Feature-Sliced Design documentation. Please visit <a href="https://feature-sliced.design/docs">the documentation website</a> directly.</p>
</iframe> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
Feature-Sliced Design is a methodology for building scalable and maintainable front-end applications, but we extend it for our entire codebase. | ||||||||||||||||||||||||||||||||
It is based on the idea of splitting the application into features, each of which is a separate entity with its own logic, UI, and data. | ||||||||||||||||||||||||||||||||
All content shared within an app is placed into the shared folder. | ||||||||||||||||||||||||||||||||
This approach allows for better organization of the codebase, easier collaboration between team members, and faster development cycles. | ||||||||||||||||||||||||||||||||
Comment on lines
+23
to
+26
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Clarify the scope and implementation details. The current description is quite brief. Consider expanding on:
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
It is highly recommended that you follow the [Feature-Sliced Design Tutorial](https://feature-sliced.design/docs/get-started/tutorial) to practice using the methodology. | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
### Example structure | ||||||||||||||||||||||||||||||||
<Files> | ||||||||||||||||||||||||||||||||
<Folder name="apps" defaultOpen> | ||||||||||||||||||||||||||||||||
<Folder name="docs" defaultOpen> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="docs-e2e"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="portal"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="portal-e2e"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="website"> | ||||||||||||||||||||||||||||||||
<File name="global.css" icon={<DiCss3 />}/> | ||||||||||||||||||||||||||||||||
<File name="home.tsx" icon={<TSX/>}/> | ||||||||||||||||||||||||||||||||
<File name="layout.tsx" /> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="website-e2e"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="libs" defaultOpen> | ||||||||||||||||||||||||||||||||
<Folder name="docs"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="docs-e2e"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="portal"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="portal-e2e"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="shared" defaultOpen> | ||||||||||||||||||||||||||||||||
<Folder name="entities"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="features"> | ||||||||||||||||||||||||||||||||
<Folder name="events"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="pages"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="utils"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="website" defaultOpen> | ||||||||||||||||||||||||||||||||
<Folder name="app"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="entities"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="features" defaultOpen> | ||||||||||||||||||||||||||||||||
<Folder name="awesome-feature" defaultOpen> | ||||||||||||||||||||||||||||||||
<Folder name="api"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="assets"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="entities"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="hooks"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="routes"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="stores"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="ui"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="utils"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<File name="index.ts" icon={<TbBrandTypescript/>}/> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="pages"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="shared"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="utils"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
<Folder name="website-e2e"> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Folder> | ||||||||||||||||||||||||||||||||
</Files> | ||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -4,8 +4,21 @@ description: WIP | |||||||||||||||||||||||||||||||
icon: Atom | ||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
## [Presenter, Container Pattern](https://www.patterns.dev/react/presentational-container-pattern/) | ||||||||||||||||||||||||||||||||
<iframe | ||||||||||||||||||||||||||||||||
title="Presenter, Container Pattern" | ||||||||||||||||||||||||||||||||
className="mt-4 w-full h-[400px] rounded-lg" | ||||||||||||||||||||||||||||||||
src="https://www.patterns.dev/react/presentational-container-pattern/" | ||||||||||||||||||||||||||||||||
allowFullScreen> | ||||||||||||||||||||||||||||||||
</iframe> | ||||||||||||||||||||||||||||||||
Comment on lines
+8
to
+13
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance iframe security and user experience The iframe implementation could benefit from additional security attributes and improved user experience. Apply these improvements: <iframe
title="Presenter, Container Pattern"
className="mt-4 w-full h-[400px] rounded-lg"
src="https://www.patterns.dev/react/presentational-container-pattern/"
- allowFullScreen>
+ allowFullScreen
+ loading="lazy"
+ sandbox="allow-scripts allow-same-origin allow-popups"
+ referrerPolicy="no-referrer">
</iframe> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||
TLDR: Presenter components answer **how** UI is rendered. Container components answer **what** UI is rendered. | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
## tsconfig | ||||||||||||||||||||||||||||||||
[tsconfig.json with comments and explanations](https://gist.github.com/er-ant/e8c2f8c47ad871a4685c2a17800c86ae) | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
## Folder structure | ||||||||||||||||||||||||||||||||
Please refer to the [Feature-Sliced Design](/concepts/feature-sliced-design) and the [Bullet-Proof React](/concepts/bullet-proof-react) for the folder structure. | ||||||||||||||||||||||||||||||||
Comment on lines
+19
to
+20
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Clarify folder structure guidelines When referencing both Feature-Sliced Design and Bullet-Proof React for folder structure, please:
🧰 Tools🪛 LanguageTool[typographical] ~19-~19: Consider adding a comma here. (PLEASE_COMMA) |
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
## Scaffolding Shadcn Ecosystem Library | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
- Find desired library from [Awesome Shadcn](https://github.com/birobirobiro/awesome-shadcn-ui) or elsewhere. | ||||||||||||||||||||||||||||||||
|
@@ -27,4 +40,4 @@ icon: Atom | |||||||||||||||||||||||||||||||
"@shadcn/*": ["libs/external/shadcn/*"], | ||||||||||||||||||||||||||||||||
"@website/*": ["libs/website/*"] | ||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,7 @@ | |
"unit-testing", | ||
"front-end", | ||
"back-end", | ||
"tooling" | ||
"tooling", | ||
"style-guide" | ||
] | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,28 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
title: Style Guide | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
description: WIP | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
icon: PenTool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
## Inspiration | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Our style guide is an extension of the [Angular Style Guide](https://angular.dev/style-guide). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
<iframe | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
title="Conventional Commits Website" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
className="mt-4 w-full h-[400px] rounded-lg" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
src="https://angular.dev/style-guide" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
allowFullScreen> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
</iframe> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+9
to
+14
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance iframe implementation for better security and accessibility. The iframe implementation needs improvements:
<iframe
-title="Conventional Commits Website"
+title="Angular Style Guide Reference"
className="mt-4 w-full h-[400px] rounded-lg"
src="https://angular.dev/style-guide"
-allowFullScreen>
+allowFullScreen
+sandbox="allow-scripts allow-same-origin">
+ Unable to load Angular Style Guide. Please visit <a href="https://angular.dev/style-guide">angular.dev/style-guide</a> directly.
</iframe> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
## Overview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
### File Naming Convention | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
We follow the Angular style guide for naming files. The file name should be in kebab-case, not capitalized, and should describe the content of the file. For example, a component file should be named `event-card.component.ts`. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+18
to
+20
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Based on the results from our verification, I can now provide a final response: Update file extension guidance to match codebase patterns The codebase shows a clear pattern:
Recommend updating the style guide to:
🔗 Analysis chainClarify file extension requirements and resolve inconsistency. The example references Let me run one more check to see if there are any React components in the main application directories that might have different extension patterns. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Check what extensions are actually used in the codebase
echo "Checking file extensions in the codebase:"
fd -e ts -e tsx | grep -E '\.(component|container|presenter|service|helper)\.(ts|tsx)$' | sort | uniq -c
Length of output: 1839 Script: #!/bin/bash
# Check for React component files in apps directory
echo "Checking React component files in apps directory:"
fd -e tsx -e ts -p apps/ | grep -i component
Length of output: 155 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
**Note:** Presenter and component files must be prefixed with a `.presenter` or a `.container` and do not need a `.component` suffix | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Examples: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `event-card.component.tsx` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `event-card.container.tsx` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `event-card.presenter.tsx` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `event.service.tsx` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `event.helper.tsx` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+21
to
+28
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Expand documentation on file suffix usage. The current documentation lacks clarity on:
Consider adding a table or section that explains each suffix type and its use case. For example: Examples:
- `event-card.component.tsx`
- `event-card.container.tsx`
- `event-card.presenter.tsx`
- `event.service.tsx`
- `event.helper.tsx`
+
+### Suffix Usage Guide
+
+| Suffix | Usage |
+|--------|-------|
+| `.container` | Components that manage state and business logic |
+| `.presenter` | Pure presentational components |
+| `.component` | Standard components (specify if required) |
+| `.service` | Service classes for business logic |
+| `.helper` | Utility functions and helper methods | 📝 Committable suggestion
Suggested change
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -40,30 +40,33 @@ export default defineConfig({ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// reporter: [['html']], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
projects: [ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'chromium', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'chromium (desktop)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['Desktop Chrome'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// name: 'firefox', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// use: { ...devices['Desktop Firefox'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// name: 'webkit', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// use: { ...devices['Desktop Safari'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Uncomment for mobile browsers support | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'Mobile Chrome', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'firefox (desktop)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['Desktop Firefox'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
testIgnore: ['./src/lighthouse.spec.ts'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'webkit (desktop)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['Desktop Safari'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
testIgnore: ['./src/lighthouse.spec.ts'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'webkit (tablet)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['iPad Mini'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
testIgnore: ['./src/lighthouse.spec.ts'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'chromium (mobile)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['Pixel 5'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'Mobile Safari', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'webkit (mobile)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['iPhone 12'] }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
testIgnore: ['./src/lighthouse.spec.ts'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+43
to
+69
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add missing The Apply this diff to maintain consistency: {
name: 'chromium (desktop)',
use: { ...devices['Desktop Chrome'] },
+ testIgnore: ['./src/lighthouse.spec.ts'],
},
...
{
name: 'chromium (mobile)',
use: { ...devices['Pixel 5'] },
+ testIgnore: ['./src/lighthouse.spec.ts'],
}, 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Uncomment for branded browsers | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'Microsoft Edge', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -74,4 +77,10 @@ export default defineConfig({ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use: { ...devices['Desktop Chrome'], channel: 'chrome' }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Ignore Chromium projects in CI to speed up runs | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignore: process.env.CI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? ['chromium (desktop)', 'chromium (mobile)'] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
: [], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
import { doLighthouseTest } from '@website-e2e/features/lighthouse/lighthouse' | ||
|
||
doLighthouseTest() | ||
Comment on lines
+1
to
+3
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Test structure needs improvement The Lighthouse test implementation is too minimal and lacks proper test structure. For a production website launch, we need:
Consider restructuring like this: import { doLighthouseTest } from '@website-e2e/features/lighthouse/lighthouse'
+import { test, expect } from '@playwright/test'
-doLighthouseTest()
+test.describe('Website Performance', () => {
+ const devices = ['Mobile', 'Tablet', 'Desktop']
+
+ for (const device of devices) {
+ test(`should meet performance thresholds on ${device}`, async () => {
+ const results = await doLighthouseTest({ device })
+
+ expect(results.performance).toBeGreaterThanOrEqual(0.9)
+ expect(results.accessibility).toBeGreaterThanOrEqual(0.9)
+ expect(results.seo).toBeGreaterThanOrEqual(0.9)
+ })
+ }
+})
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
// import type { Browser } from 'playwright' | ||
// import { chromium, expect, test } from '@playwright/test' | ||
import { footerMobileTabletDesktop } from '@website-e2e/ui/footer/footer' | ||
import { navbarMobile, navbarMobileTabletDesktop, navbarTabletDesktop } from '@website-e2e/ui/navbar/navbar' | ||
import { sponsorsMobileTabletDesktop } from '@website-e2e/ui/sponsorship/sponsorship' | ||
import { welcomeMobileTabletDesktop } from '@website-e2e/ui/welcome/welcome' | ||
|
||
navbarMobileTabletDesktop() | ||
navbarTabletDesktop() | ||
navbarMobile() | ||
welcomeMobileTabletDesktop() | ||
footerMobileTabletDesktop() | ||
sponsorsMobileTabletDesktop() | ||
Comment on lines
+1
to
+13
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Critical: Test file structure needs significant improvements. The current implementation has several issues that need to be addressed:
Here's how the file should be structured: - // import type { Browser } from 'playwright'
- // import { chromium, expect, test } from '@playwright/test'
+ import { test } from '@playwright/test'
import { footerMobileTabletDesktop } from '@website-e2e/ui/footer/footer'
import { navbarMobile, navbarMobileTabletDesktop, navbarTabletDesktop } from '@website-e2e/ui/navbar/navbar'
import { sponsorsMobileTabletDesktop } from '@website-e2e/ui/sponsorship/sponsorship'
import { welcomeMobileTabletDesktop } from '@website-e2e/ui/welcome/welcome'
- navbarMobileTabletDesktop()
- navbarTabletDesktop()
- navbarMobile()
- welcomeMobileTabletDesktop()
- footerMobileTabletDesktop()
- sponsorsMobileTabletDesktop()
+ test.describe('Home Page', () => {
+ test('should render correctly on mobile', async ({ page }) => {
+ // Set mobile viewport
+ await page.setViewportSize({ width: 375, height: 667 })
+ await navbarMobile(page)
+ await welcomeMobileTabletDesktop(page)
+ await footerMobileTabletDesktop(page)
+ await sponsorsMobileTabletDesktop(page)
+ })
+
+ test('should render correctly on tablet', async ({ page }) => {
+ // Set tablet viewport
+ await page.setViewportSize({ width: 768, height: 1024 })
+ await navbarTabletDesktop(page)
+ await welcomeMobileTabletDesktop(page)
+ await footerMobileTabletDesktop(page)
+ await sponsorsMobileTabletDesktop(page)
+ })
+
+ test('should render correctly on desktop', async ({ page }) => {
+ // Set desktop viewport
+ await page.setViewportSize({ width: 1440, height: 900 })
+ await navbarMobileTabletDesktop(page)
+ await welcomeMobileTabletDesktop(page)
+ await footerMobileTabletDesktop(page)
+ await sponsorsMobileTabletDesktop(page)
+ })
+ })
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Documentation and testing coverage needs improvement
Several UI components are missing stories and documentation:
sponsor-presenter/sponsor-item.tsx
sponsor-presenter/sponsor-presenter.tsx
faq-item/faq-item.tsx
.md
or.mdx
) found in the UI components directorystat-item.stories.tsx
) lack viewport-specific testing scenarios for responsive design🔗 Analysis chain
Documentation and testing requirements
According to the PR objectives, documentation updates and tests are pending. Please ensure that:
Let me gather more information about the UI components to better assess the test coverage.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 699
Script:
Length of output: 2396