Skip to content

feat(drizzle): added ods for analytics from drizzle#1956

Merged
waleedlatif1 merged 2 commits into
stagingfrom
feat/drizzle-ods
Nov 13, 2025
Merged

feat(drizzle): added ods for analytics from drizzle#1956
waleedlatif1 merged 2 commits into
stagingfrom
feat/drizzle-ods

Conversation

@waleedlatif1
Copy link
Copy Markdown
Collaborator

Summary

  • added ods for analytics from drizzle

Type of Change

  • New feature

Testing

Tested manually

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link
Copy Markdown

vercel Bot commented Nov 13, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
docs Skipped Skipped Nov 13, 2025 0:35am

@waleedlatif1 waleedlatif1 merged commit 766c7fb into staging Nov 13, 2025
4 checks passed
@waleedlatif1 waleedlatif1 deleted the feat/drizzle-ods branch November 13, 2025 00:35
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Nov 13, 2025

Greptile Overview

Greptile Summary

This PR integrates OneDollarStats analytics by adding a new client component, environment variable, CSP rules, and external script loading. However, the implementation has a critical bug: the API key from DRIZZLE_ODS_API_KEY is checked but never passed to the configure() function, which will likely prevent analytics from working correctly.

Key Changes:

  • Added [email protected] package dependency
  • Created OneDollarStats component that conditionally initializes analytics
  • Added DRIZZLE_ODS_API_KEY environment variable to env.ts
  • Updated CSP to allow OneDollarStats domains
  • Added external script in layout head

Issues Found:

  • Critical: API key not passed to configure() function (apps/sim/components/analytics/onedollarstats.tsx:15-19)
  • Style: Missing TSDoc on component per .cursorrules requirements
  • Optimization: Script loads unconditionally even when API key is not set

Confidence Score: 2/5

  • Not safe to merge - analytics will likely not work due to missing API key in configuration
  • Score reflects a critical logical error where the API key is checked for presence but never actually passed to the configure() function. This will prevent the analytics from functioning correctly. Additionally, the component violates established code style guidelines by missing required TSDoc documentation.
  • apps/sim/components/analytics/onedollarstats.tsx requires immediate attention - the configure() call is missing the API key parameter

Important Files Changed

File Analysis

Filename Score Overview
apps/sim/components/analytics/onedollarstats.tsx 1/5 New analytics component with critical bug: API key not passed to configure()
apps/sim/app/layout.tsx 3/5 Added OneDollarStats component and script; script loads unconditionally
apps/sim/lib/env.ts 5/5 Added DRIZZLE_ODS_API_KEY environment variable with proper validation

Sequence Diagram

sequenceDiagram
    participant Browser
    participant Layout
    participant Head
    participant Body
    participant OneDollarStats
    participant ODS_SDK as OneDollarStats SDK
    participant Collector as collector.onedollarstats.com

    Browser->>Layout: Load page
    Layout->>Head: Render <head>
    Head->>Browser: Load stonks.js script
    Browser-->>ODS_SDK: Script loaded
    
    Layout->>Body: Render <body>
    Body->>OneDollarStats: Mount component
    OneDollarStats->>OneDollarStats: Check DRIZZLE_ODS_API_KEY
    
    alt API key is set
        OneDollarStats->>ODS_SDK: configure({ collectorUrl, autocollect, hashRouting })
        Note over OneDollarStats,ODS_SDK: Missing: API key not passed
        ODS_SDK->>Collector: Send analytics events
    else API key not set
        OneDollarStats->>OneDollarStats: Skip initialization
        Note over Head,OneDollarStats: Issue: Script loads anyway
    end
Loading

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

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

5 files reviewed, 3 comments

Edit Code Review Agent Settings | Greptile

import { configure } from 'onedollarstats'
import { env } from '@/lib/env'

export function OneDollarStats() {
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.

style: Missing TSDoc. Per .cursorrules line 144, components must have TSDoc with description, @param, and @returns

Suggested change
export function OneDollarStats() {
/**
* OneDollarStats analytics component. Initializes analytics tracking
* when DRIZZLE_ODS_API_KEY is configured.
*
* @returns null - component has no visual output
*/
export function OneDollarStats() {

Context Used: Context from dashboard - apps/sim/.cursorrules (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/sim/components/analytics/onedollarstats.tsx
Line: 7:7

Comment:
**style:** Missing TSDoc. Per .cursorrules line 144, components must have TSDoc with description, `@param`, and `@returns`

```suggestion
/**
 * OneDollarStats analytics component. Initializes analytics tracking
 * when DRIZZLE_ODS_API_KEY is configured.
 *
 * @returns null - component has no visual output
 */
export function OneDollarStats() {
```

**Context Used:** Context from `dashboard` - apps/sim/.cursorrules ([source](https://app.greptile.com/review/custom-context?memory=867b3993-a968-40e2-b2e0-8ce533acea2e))

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

Comment thread apps/sim/app/layout.tsx
Comment on lines +59 to +60
{/* OneDollarStats Analytics */}
<script defer src='https://assets.onedollarstats.com/stonks.js' />
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.

style: Script loads unconditionally but OneDollarStats component only initializes when DRIZZLE_ODS_API_KEY is set. This wastes bandwidth loading an unused script.

Consider conditionally rendering based on the API key presence or move script loading into the component.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/sim/app/layout.tsx
Line: 59:60

Comment:
**style:** Script loads unconditionally but `OneDollarStats` component only initializes when `DRIZZLE_ODS_API_KEY` is set. This wastes bandwidth loading an unused script.

Consider conditionally rendering based on the API key presence or move script loading into the component.

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

Comment on lines +15 to +19
configure({
collectorUrl: 'https://collector.onedollarstats.com/events',
autocollect: true,
hashRouting: true,
})
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: DRIZZLE_ODS_API_KEY is checked but never passed to configure(). Analytics packages typically require the API key in their config.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/sim/components/analytics/onedollarstats.tsx
Line: 15:19

Comment:
**logic:** `DRIZZLE_ODS_API_KEY` is checked but never passed to `configure()`. Analytics packages typically require the API key in their config.

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

Sg312 pushed a commit that referenced this pull request Nov 14, 2025
* feat(drizzle): added ods for analytics from drizzle

* clean
Sg312 added a commit that referenced this pull request Nov 21, 2025
* Edit workflow returns workflow

* Condense workflkow conosle

* Limit console results to 2

* mark checkoff v1

* Mark and checkoff todo

* Fixes

* Plan mode

* fix agent output

* broken

* Fixes

* Fix diff mode persist

* Fix diff coloring

* Undo/redo

* Checkpoint udno redo

* fix(templates): fix templates details page (#1942)

* Fix template details

* Fix deps

* fix(templates-details): restore approval feature, and keep details UI consistent, smoothen out creation of profile (#1943)

* fix(templates): view current ui

* update UI to be less cluttered

* make state management for creating user profile smoother

* fix autoselect logic

* fix lint

* fix(landing): need to propagate landing page copilot prompt (#1944)

* fix(wand): subblocks should not be overwritten after wand gen (#1946)

* fix(settings): fix broken api keys, help modal, logs, workflow renaming (#1945)

* fix(settings): fix broken api keys, help modal, logs, workflow renaming

* fix build

* cleanup

* use emcn

* fix(files): changed file input value sample from string -> object (#1947)

* improvement: usage-indicator UI (#1948)

* fix(deploy): fix button (#1949)

* fix(executor): consolidate execution hooks (#1950)

* fix(autoconnect): should check if triggermode is set from the toolbar drag event directly (#1951)

* improvement: templates styling (#1952)

* improvement: template use button (#1954)

* feat(newgifs): added new gifs (#1953)

* new gifs

* changed wording

* changed wording

* lowercase

* changed wording

* remove blog stuff

---------

Co-authored-by: aadamgough <[email protected]>
Co-authored-by: waleed <[email protected]>

* feat(drizzle): added ods for analytics from drizzle (#1956)

* feat(drizzle): added ods for analytics from drizzle

* clean

* fix(sheets): file selector had incorrect provider (#1958)

* feat(docs): added docs analytics drizzle ods (#1957)

* feat(docs): added docs analytics drizzle ods

* fix build

* fix provider for docs selector (#1959)

* fix(custom-tools): updates to legacy + copilot generated custom tools  (#1960)

* fix(custom-tools): updates to existing tools

* don't reorder custom tools in modal based on edit time

* restructure custom tools to persist copilot generated tools

* fix tests

* fix(slack): remove update message incorrect canonical param (#1964)

* fix(slack): send message tool

* add logging

* add more logs

* add more logs

* fix canonical param

* improvement(templates): add share button, serve public templates routes for unauthenticated users and workspace one for authenticated users, improve settings style and organization (#1962)

* improvement(templates): add share button, serve public templates routes for unauthenticated users and workspace one for authenticated users, improve settings style and organization

* fix lint

---------

Co-authored-by: Vikhyath Mondreti <[email protected]>

* fix(onedrive): incorrect canonical param (#1966)

* fix(onedrive): incorrect canonical param

* fix download file

* fix

* fix

* Revert "fix"

This reverts commit f68ccd7.

* Revert "fix"

This reverts commit f3d8ace.

* fix(executor): streaming after tool calls (#1963)

* Provider changes

* Fix lint

* fix(code): readd wand to code subblock (#1969)

* fix(cmd-k): z-index + reoder tools, triggers (#1970)

* fix(cmd-k): z-index + reoder tools, triggers

* fix more z-index styling

* fix(executor): streaming response format (#1972)

* fix(workflow-block): fix redeploy header to not repeatedly show redeploy when redeploy is not necessary (#1973)

* fix(workflow-block): fix redeploy header to not repeatedly show redeploy when redeploy is not necessary

* cleanup

* improvement(platform): chat, emcn, terminal, usage-limit (#1974)

* improvement(usage-indicator): layout

* improvement: expand default terminal height

* fix: swap workflow block ports

* improvement: chat initial positioning

* improvement(chat): display; improvement(emcn): popover attributes

* fix lint

* feat(settings): added reactquery for settings, removed zustand stores, added apollo, added workflow block selector dropdown search, added add environment variable option to empty env var dropdown (#1971)

* feat(settings): added reactquery for settings, removed zustand stores, added apollo, added workflow block selector dropdown search, added add environment variable option to empty env var dropdown

* fix delete dialog for copilot keys

* simplify combobox

* fix more z indices

* consolidated duplicate hooks

---------

Co-authored-by: Vikhyath Mondreti <[email protected]>

* fix(copilot-subflows): copilot-added subflows id mismatch (#1977)

* feat(i18n): update translations (#1978)

* feat(i18n): update translations

* fix build

---------

Co-authored-by: waleedlatif1 <[email protected]>

* fix(logs): show block inputs (#1979)

* Fix executor lgos block inputs

* Fix Comment

* fix(onedrive): parse array values correctly (#1981)

* fix(onedrive): parse array values correctly

* fix onedrive

* fix

* fix onedrive input parsing by reusing code subblock

* fix type

* feat(files): add presigned URL generation support for execution files (#1980)

* fix(popovers): billed account + async example command (#1982)

* fix(settings): update usage data in settings > subs to use reactquery hooks (#1983)

* fix(settings): update usage data in settings > subs to use reactquery hooks

* standardize usage pills calculation

* fix(output-selector): z-index in chat deploy modal (#1984)

* improvement(logs): improved logs search (#1985)

* improvement(logs): improved logs search

* more

* ack PR comments

* feat(slack): added slack full message object in response (#1987)

* feat(slack): add better error messages, reminder to add bot to app (#1990)

* feat(i18n): update translations (#1989)

Co-authored-by: waleedlatif1 <[email protected]>

* fix(landing): hero stripe icon (#1988)

* Temp

* Update

* Update

* Update

* Progress

* Diff store fixes

* simplify sockets ops for diff store

* Search patterns tool

* Better tool calls

* Fix sanitizationg

* Context window display

* fix(variables): fix double stringification (#1991)

* improvement(variables): support dot notation for nested objects (#1992)

* improvement(tanstack): migrate multiple stores (#1994)

* improvement(tanstack): migrate folders, knowledge to tanstack

* fix types

* fix(folders): duplicate (#1996)

* fix(variables): fix variables block json resolution (#1997)

* Improvement(ui/ux): signup, command-list, cursors, search modal, workflow runs, usage indicator (#1998)

* improvement: signup loading, command-list, cursors, search modal ordering

* improvement: workflow runs, search modal

* improvement(usage-indicator): ui/ux

* test(pr): hackathon (#1999)

* test(pr): github trigger (#2000)

* fix(usage-indicator): conditional rendering, upgrade, and ui/ux (#2001)

* fix: usage-limit indicator and render conditonally on is billing enabled

* fix: upgrade render

* fix(notes): fix notes, tighten spacing, update deprecated zustand function, update use mention data to ignore block positon (#2002)

* fix(pdfs): use unpdf instead of pdf-parse (#2004)

* fix(modals): fix z-index for various modals and output selector and variables (#2005)

* fix(condition): treat condition input the same as the code subblock (#2006)

* feat(models): added gpt-5.1 (#2007)

* improvement: runpath edges, blocks, active (#2008)

* feat(i18n): update translations (#2009)

* fix(triggers): check triggermode and consolidate block type (#2011)

* fix(triggers): disabled trigger shouldn't be added to dag (#2012)

* Fix disabled blocks

* Comments

* Fix api/chat trigger not found message

* fix(tags): only show start block upstream if is ancestor (#2013)

* fix(variables): Fix resolution on double < (#2016)

* Fix variable <>

* Ling

* Clean

* feat(billing): add notif for first failed payment, added upgrade email from free, updated providers that supported granular tool control to support them, fixed envvar popover, fixed redirect to wrong workspace after oauth connect (#2015)

* feat(billing): add notif for first failed payment, added upgrade email from free, updated providers that supported granular tool control to support them, fixed envvar popover, fixed redirect to wrong workspace after oauth connect

* fix build

* ack PR comments

* feat(performance): added reactquery hooks for workflow operations, for logs, fixed logs reloading, fix subscription UI (#2017)

* feat(performance): added reactquery hooks for workflow operations, for logs, fixed logs reloading, fix subscription UI

* use useInfiniteQuery for logs fetching

* fix(copilot): run workflow supports input format and fix run id (#2018)

* fix(router): fix error edge in router block + fix source handle problem (#2019)

* Fix router block error port handling

* Remove comment

* Fix edge execution

* improvement: code subblock, action bar, connections (#2024)

* improvement: action bar, connections

* fix: code block draggable resize

* fix(response): fix response block http format (#2027)

* Fix response block

* Lint

* fix(notes): fix notes block spacing, additional logs for billing transfer route (#2029)

* fix(usage-data): refetch on usage limit update in settings (#2032)

* fix(overage): fix pill calculation in the usage indicator to be consistent across views (#2034)

* fix(workflows): fixed workflow loading in without start block, added templates RQ hook, cleaned up unused templates code (#2035)

* fix(triggers): dedup + not surfacing deployment status log (#2033)

* fix(triggers): dedup + not surfacing deployment status log

* fix ms teams

* change to microsoftteams

* Revert "change to microsoftteams"

This reverts commit 217f808.

* fix

* fix

* fix provider name

* fix oauth for msteams

* improvement(undo-redo): expand undo-redo store to store 100 ops instead of 15 (#2036)

* improvement(undo-redo): expand undo-redo store to store 100 ops instead of 15

* prevent undo-redo from interfering with subblock browser text undo

* improvement(docs): remove copy page from mobile view on docs (#2037)

* improvement(docs): remove copy page from mobile view on docs

* bring title and pagenav lower on mobile

* added cursor pointer to clickable components in docs

* fix(workflow-block): clearing child workflow input format field must lazy cascade parent workflow state deletion (#2038)

* Error tools

* Ui tools

* Navigate ui tool

* Combine env vars and oauth tools

* Plan mode section

* Plan mode v1

* Plan mode v1

* Plan mode improvements

* Build plan button

* Make workflow plan editable

* Tool improvements

* Fix build plan button

* Lint

* Fix

* Fix lint

* Fix plan

* Remove migrations

* fix undo/redo settling of ops

* Add migratinos back

* Smoothen out diff store

* Hide plan mode

* Fix lint

* Edit run workflow params

* Fix lint

* Fix tests

* Fix typing

* Fix build errors and lint

* Fix build

* Fix tests

---------

Co-authored-by: Vikhyath Mondreti <[email protected]>
Co-authored-by: Waleed <[email protected]>
Co-authored-by: Emir Karabeg <[email protected]>
Co-authored-by: Adam Gough <[email protected]>
Co-authored-by: aadamgough <[email protected]>
Co-authored-by: Vikhyath Mondreti <[email protected]>
Co-authored-by: Emir Karabeg <[email protected]>
Co-authored-by: waleedlatif1 <[email protected]>
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.

1 participant