Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion case-studies/ansa.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ rx.vstack(
)
```

Meet [Ansa](www.ansa.co), a venture capital firm based in New York City that invests in companies from Series A to C. They have invested in companies like Defense Unicorns, Bland, Gradient, and Selector and prior to founding the firm, supported investments in many of the venture-capital industry’s largest outcomes including Crowdstrike, Coinbase, and SurveyMonkey to name a few.
Meet [Ansa](https://www.ansa.co), a venture capital firm based in New York City that invests in companies from Series A to C. They have invested in companies like Defense Unicorns, Bland, Gradient, and Selector and prior to founding the firm, supported investments in many of the venture-capital industry’s largest outcomes including Crowdstrike, Coinbase, and SurveyMonkey to name a few.

Ryan Sullivan is an investor and oversees the engineering and data science team at Ansa. He finds and supports new investments and is the architect behind Ansa's data-driven sourcing strategy, working closely with the firms’ Managing Partner Marco Demeireles to build the firms’ proprietary sourcing applications and research products.

Expand Down
2 changes: 1 addition & 1 deletion case-studies/sellerx.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ Below are some of the key Reflex features their app took advantage of:

- Reflex's background events for long running scraping tasks to extract all the data that they needed.

- [AG Grid]({library.tables_and_data_grids.ag_grid.path}), which is built into Reflex, to display the data in a table. AG Grid is a high performance data grid that is used in many fortune 500 companies web applications.
- [AG Grid](/docs/enterprise/ag-grid), which is built into Reflex, to display the data in a table. AG Grid is a high performance data grid that is used in many fortune 500 companies web applications.

- SSO was a requirement for the app, and Mike used Azure Auth, one of the many options provided by Reflex for authentication.

Expand Down
8 changes: 6 additions & 2 deletions docs/custom-components/command-reference.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
```python exec
from pcweb.pages import docs
```

# Command Reference

The custom component commands are under `reflex component` subcommand. To see the list of available commands, run `reflex component --help`. To see the manual on a specific command, run `reflex component <command> --help`, for example, `reflex component init --help`.
Expand Down Expand Up @@ -81,11 +85,11 @@ The `custom_components` folder is where the actual implementation is. Do not wor

`reflex_google_auth` is the top folder for importable code. The `reflex_google_auth/__init__.py` imports everything from the `reflex_google_auth/google_auth.py`. For the user of the package, the import looks like `from reflex_google_auth import ABC, XYZ`.

`reflex_google_auth/google_auth.py` is prefilled with code example and instructions from the [wrapping react guide]({wrapping_react.overview.path}).
`reflex_google_auth/google_auth.py` is prefilled with code example and instructions from the [wrapping react guide]({docs.wrapping_react.overview.path}).

### Demo App Folder

A demo app is generated inside `google_auth_demo` folder with import statements and example usage of the component. This is a regular Reflex app. Go into this directory and start using any reflex commands for testing. The user is encouraged to deploy the demo app, so it can later be included as part of the [Gallery]({gallery.path}).
A demo app is generated inside `google_auth_demo` folder with import statements and example usage of the component. This is a regular Reflex app. Go into this directory and start using any reflex commands for testing.

### Help Manual

Expand Down
2 changes: 1 addition & 1 deletion docs/enterprise/mantine/pill.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def pill_group_page():
By itself it does not include any logic, it only renders given children.

```md alert info
# For a fully functional out-of-the-box component, consider using [`rxe.mantine.tags_input`]({docs.mantine.tags_input.route}) instead.
# For a fully functional out-of-the-box component, consider using [`rxe.mantine.tags_input`](/docs/enterprise/mantine/tags-input/) instead.
```

## Example
Expand Down
2 changes: 1 addition & 1 deletion docs/getting_started/dashboard_tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -1606,7 +1606,7 @@ The `radius` prop sets the global radius value for the app that is inherited by

The `accent_color` prop sets the accent color of the app. Check out other options for the accent color [here]({docs.library.other.theme.path}).

To see other props that can be set at the app level check out this [documentation](docs.styling.theming.path)
To see other props that can be set at the app level check out this [documentation]({docs.styling.theming.path})

```python
app = rx.App(
Expand Down
2 changes: 1 addition & 1 deletion docs/library/data-display/callout.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ A `callout` is a short message to attract user's attention.
rx.callout("You will need admin privileges to install and access this application.", icon="info")
```

The `icon` prop allows an icon to be passed to the `callout` component. See the [**icon** component for all icons that are available.]({docs.library.data_display.icon.path})
The `icon` prop allows an icon to be passed to the `callout` component. See the [**icon** component for all icons that are available.](/docs/library/data-display/icon)

## As alert

Expand Down
2 changes: 1 addition & 1 deletion docs/library/forms/select.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ def select_form_example():

### Using Select within a Drawer component

If using within a [Drawer](../../overlay/drawer/) component, set the `position` prop to `"popper"` to ensure the select menu is displayed correctly.
If using within a [Drawer](/docs/library/overlay/drawer) component, set the `position` prop to `"popper"` to ensure the select menu is displayed correctly.

```python demo
rx.drawer.root(
Expand Down
7 changes: 4 additions & 3 deletions pcweb/pages/gallery/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from pcweb.components.icons import get_icon
from pcweb.constants import SCREENSHOT_BUCKET
from pcweb.flexdown import xd2 as xd
from pcweb.pages.gallery import gallery
from pcweb.pages import docs
from pcweb.templates.gallery_app_page import gallery_app_page

GALLERY_APP_SOURCES = [
Expand Down Expand Up @@ -73,7 +73,8 @@ def more_posts(current_post: dict) -> rx.Component:
selected_posts = other_posts[current_index - 2 : current_index + 1]

for _path, document in selected_posts:
posts.append(gallery_app_card(app=document.metadata))
if not _path[0].startswith("reflex_build_templates/"):
posts.append(gallery_app_card(app=document.metadata))

return rx.el.section(
rx.box(
Expand All @@ -87,7 +88,7 @@ def more_posts(current_post: dict) -> rx.Component:
class_name="flex items-center gap-1.5 border-slate-5 bg-slate-1 hover:bg-slate-3 shadow-small px-1.5 py-0.5 border rounded-md w-auto max-w-full text-slate-9 transition-bg cursor-pointer overflow-hidden border-solid",
),
underline="none",
href=gallery.path,
href=docs.getting_started.open_source_templates.path,
),
class_name="flex flex-row items-center justify-between gap-4",
),
Expand Down
4 changes: 4 additions & 0 deletions pcweb/pcweb.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@

# Add redirects
redirects = [
("/docs/ui", "/docs/ui/overview"),
("/docs/enterprise/react-flow", "/docs/enterprise/react-flow/overview"),
("/docs/advanced-onboarding", "/docs/advanced-onboarding/code-structure"),
("/docs/hosting/cli", "/docs/hosting"),
("/docs/enterprise/ag-grid/index", "/docs/enterprise/ag-grid"),
("/docs/ai-builder/integrations", "/docs/ai-builder/integrations/overview"),
("/docs/ai-builder/app-lifecycle", "/docs/ai-builder/app-lifecycle/general"),
Expand Down
26 changes: 23 additions & 3 deletions scripts/check_dead_links.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,23 @@ def normalize_url(self, url):
normalized += f"?{parsed.query}"
return normalized

def is_image_url(self, url):
"""Check if URL points to an image file."""
image_extensions = {
".webp",
".png",
".jpg",
".jpeg",
".gif",
".svg",
".ico",
".bmp",
".tiff",
}
parsed = urlparse(url)
path_lower = parsed.path.lower()
return any(path_lower.endswith(ext) for ext in image_extensions)

def check_link(self, url, source_page):
"""Check if a single link is working."""
if url in self.checked_links:
Expand Down Expand Up @@ -113,7 +130,9 @@ def extract_links(self, html, page_url):

if url:
absolute_url = urljoin(page_url, url)
if not absolute_url.startswith(("javascript:", "mailto:", "tel:")):
if not absolute_url.startswith(
("javascript:", "mailto:", "tel:", "data:")
):
links.append(absolute_url)

return links
Expand All @@ -139,9 +158,10 @@ def crawl_page(self, url):
links = self.extract_links(response.text, url)

for link in links:
self.check_link(link, url)
# Only check internal links and skip images
if self.is_internal_url(link) and not self.is_image_url(link):
self.check_link(link, url)

if self.is_internal_url(link):
normalized = self.normalize_url(link)
if normalized not in self.visited_pages:
self.pages_to_visit.append(normalized)
Comment on lines 160 to 167
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

logic: external links are no longer being checked. Original code checked ALL links but only queued internal ones for crawling. Now external links are completely skipped.

Suggested change
for link in links:
self.check_link(link, url)
# Only check internal links and skip images
if self.is_internal_url(link) and not self.is_image_url(link):
self.check_link(link, url)
if self.is_internal_url(link):
normalized = self.normalize_url(link)
if normalized not in self.visited_pages:
self.pages_to_visit.append(normalized)
for link in links:
# Skip images for link checking
if not self.is_image_url(link):
self.check_link(link, url)
# Only queue internal, non-image links for crawling
if self.is_internal_url(link) and not self.is_image_url(link):
normalized = self.normalize_url(link)
if normalized not in self.visited_pages:
self.pages_to_visit.append(normalized)
Prompt To Fix With AI
This is a comment left during a code review.
Path: scripts/check_dead_links.py
Line: 160:167

Comment:
**logic:** external links are no longer being checked. Original code checked ALL links but only queued internal ones for crawling. Now external links are completely skipped.

```suggestion
            for link in links:
                # Skip images for link checking
                if not self.is_image_url(link):
                    self.check_link(link, url)

                # Only queue internal, non-image links for crawling
                if self.is_internal_url(link) and not self.is_image_url(link):
                    normalized = self.normalize_url(link)
                    if normalized not in self.visited_pages:
                        self.pages_to_visit.append(normalized)
```

How can I resolve this? If you propose a fix, please make it concise.

Expand Down