mirror of
https://github.com/AderKonstantin/aderktech-chronark.com-.git
synced 2025-06-08 05:38:41 +03:00
23 lines
68 KiB
JSON
23 lines
68 KiB
JSON
{
|
|
"published": true,
|
|
"title": "Upstash Core Analytics",
|
|
"description": "Low level utilities to build analytics tools on top of Redis.",
|
|
"date": "2023-02-13T00:00:00.000Z",
|
|
"url": "https://console.upstash.com/ratelimit",
|
|
"repository": "upstash/core-analytics",
|
|
"body": {
|
|
"raw": "\n\nThis library offers some low level building blocks to record and analyze custom events in Redis.\nIt's main purpose is to provide a simple way to record and query events in Redis without having to worry about the underlying data structure so we can build more advanced analytics features on top of it.\n\n## Quickstart\n\n\n1. Create a redis database\n\nGo to [console.upstash.com/redis](https://console.upstash.com/redis) and create\na new global database.\n\nAfter creating the db, copy the `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` to your `.env` file.\n\n3. Install `@upstash/analytics` in your project\n\n```bash\nnpm install @upstash/analytics @upstash/redis\n```\n\n4. Create an analytics client\n\n```ts\nimport { Analytyics } from \"@upstash/analytics\";\nimport { Redis } from \"@upstash/redis\";\n\nconst analytics = new Analytics({\n redis: Redis.fromEnv(),\n window: \"1d\",\n});\n```\n\n\n5. Ingest some events\n\nAn event consists of a `time` field and any additional key-value pairs that you can use to record any information you want.\n\n```ts\nconst event = {\n time: Date.now() // optional (default: Date.now())\n userId: \"chronark\",\n page: \"/auth/login\",\n country: \"DE\",\n}\n\nawait analytics.ingest(\"pageviews\", event);\n```\n\n4. Query your events\n\n```ts\n\nconst result = await analytics.query(\"pageviews\");\n\n```\n\n## Development\n\nThis project uses `pnpm` for dependency management.\n\n#### Install dependencies\n\n```bash\npnpm install\n```\n\n#### Build\n\n```bash\npnpm build\n```\n\n\n## Database Schema\n\nAll metrics are stored in Redis `Hash` data types and sharded into buckets based on the `window` option.\n```\n@upstash/analytics:{TABLE}:{TIMESTAMP}\n```\n- `TABLE` is a namespace to group events together. ie for managing multiple projects int a single database\n- `TIMESTAMP` is the starting timestamp of each window\n\nThe field of each hash is a serialized JSON object with the user's event data and the value is the number of times this event has been recorded.\n\n```json\n{\n '{\"page\": \"/auth/login\",\"country\": \"DE\"}': 5,\n '{\"page\": \"/auth/login\",\"country\": \"US\"}': 2\n}\n```\n",
|
|
"code": "var Component=(()=>{var cn=Object.create;var P=Object.defineProperty;var ln=Object.getOwnPropertyDescriptor;var mn=Object.getOwnPropertyNames;var un=Object.getPrototypeOf,hn=Object.prototype.hasOwnProperty;var z=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports),fn=(l,e)=>{for(var _ in e)P(l,_,{get:e[_],enumerable:!0})},xe=(l,e,_,y)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let k of mn(e))!hn.call(l,k)&&k!==_&&P(l,k,{get:()=>e[k],enumerable:!(y=ln(e,k))||y.enumerable});return l};var bn=(l,e,_)=>(_=l!=null?cn(un(l)):{},xe(e||!l||!l.__esModule?P(_,\"default\",{value:l,enumerable:!0}):_,l)),_n=l=>xe(P({},\"__esModule\",{value:!0}),l);var Ee=z((gn,ge)=>{ge.exports=React});var je=z(G=>{\"use strict\";(function(){\"use strict\";var l=Ee(),e=Symbol.for(\"react.element\"),_=Symbol.for(\"react.portal\"),y=Symbol.for(\"react.fragment\"),k=Symbol.for(\"react.strict_mode\"),H=Symbol.for(\"react.profiler\"),K=Symbol.for(\"react.provider\"),X=Symbol.for(\"react.context\"),F=Symbol.for(\"react.forward_ref\"),D=Symbol.for(\"react.suspense\"),A=Symbol.for(\"react.suspense_list\"),R=Symbol.for(\"react.memo\"),B=Symbol.for(\"react.lazy\"),Re=Symbol.for(\"react.offscreen\"),J=Symbol.iterator,Te=\"@@iterator\";function Ce(n){if(n===null||typeof n!=\"object\")return null;var a=J&&n[J]||n[Te];return typeof a==\"function\"?a:null}var g=l.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function h(n){{for(var a=arguments.length,t=new Array(a>1?a-1:0),o=1;o<a;o++)t[o-1]=arguments[o];we(\"error\",n,t)}}function we(n,a,t){{var o=g.ReactDebugCurrentFrame,i=o.getStackAddendum();i!==\"\"&&(a+=\"%s\",t=t.concat([i]));var c=t.map(function(d){return String(d)});c.unshift(\"Warning: \"+a),Function.prototype.apply.call(console[n],console,c)}}var Se=!1,Oe=!1,Pe=!1,De=!1,Ae=!1,Q;Q=Symbol.for(\"react.module.reference\");function Be(n){return!!(typeof n==\"string\"||typeof n==\"function\"||n===y||n===H||Ae||n===k||n===D||n===A||De||n===Re||Se||Oe||Pe||typeof n==\"object\"&&n!==null&&(n.$$typeof===B||n.$$typeof===R||n.$$typeof===K||n.$$typeof===X||n.$$typeof===F||n.$$typeof===Q||n.getModuleId!==void 0))}function Ie(n,a,t){var o=n.displayName;if(o)return o;var i=a.displayName||a.name||\"\";return i!==\"\"?t+\"(\"+i+\")\":t}function Z(n){return n.displayName||\"Context\"}function p(n){if(n==null)return null;if(typeof n.tag==\"number\"&&h(\"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"),typeof n==\"function\")return n.displayName||n.name||null;if(typeof n==\"string\")return n;switch(n){case y:return\"Fragment\";case _:return\"Portal\";case H:return\"Profiler\";case k:return\"StrictMode\";case D:return\"Suspense\";case A:return\"SuspenseList\"}if(typeof n==\"object\")switch(n.$$typeof){case X:var a=n;return Z(a)+\".Consumer\";case K:var t=n;return Z(t._context)+\".Provider\";case F:return Ie(n,n.render,\"ForwardRef\");case R:var o=n.displayName||null;return o!==null?o:p(n.type)||\"Memo\";case B:{var i=n,c=i._payload,d=i._init;try{return p(d(c))}catch{return null}}}return null}var x=Object.assign,U=0,ee,ne,re,ae,te,oe,se;function de(){}de.__reactDisabledLog=!0;function Le(){{if(U===0){ee=console.log,ne=console.info,re=console.warn,ae=console.error,te=console.group,oe=console.groupCollapsed,se=console.groupEnd;var n={configurable:!0,enumerable:!0,value:de,writable:!0};Object.defineProperties(console,{info:n,log:n,warn:n,error:n,group:n,groupCollapsed:n,groupEnd:n})}U++}}function Me(){{if(U--,U===0){var n={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:x({},n,{value:ee}),info:x({},n,{value:ne}),warn:x({},n,{value:re}),error:x({},n,{value:ae}),group:x({},n,{value:te}),groupCollapsed:x({},n,{value:oe}),groupEnd:x({},n,{value:se})})}U<0&&h(\"disabledDepth fell below zero. This is a bug in React. Please file an issue.\")}}var I=g.ReactCurrentDispatcher,L;function T(n,a,t){{if(L===void 0)try{throw Error()}catch(i){var o=i.stack.trim().match(/\\n( *(at )?)/);L=o&&o[1]||\"\"}return`\n`+L+n}}var M=!1,C;{var Ye=typeof WeakMap==\"function\"?WeakMap:Map;C=new Ye}function ie(n,a){if(!n||M)return\"\";{var t=C.get(n);if(t!==void 0)return t}var o;M=!0;var i=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var c;c=I.current,I.current=null,Le();try{if(a){var d=function(){throw Error()};if(Object.defineProperty(d.prototype,\"props\",{set:function(){throw Error()}}),typeof Reflect==\"object\"&&Reflect.construct){try{Reflect.construct(d,[])}catch(N){o=N}Reflect.construct(n,[],d)}else{try{d.call()}catch(N){o=N}n.call(d.prototype)}}else{try{throw Error()}catch(N){o=N}n()}}catch(N){if(N&&o&&typeof N.stack==\"string\"){for(var s=N.stack.split(`\n`),f=o.stack.split(`\n`),m=s.length-1,u=f.length-1;m>=1&&u>=0&&s[m]!==f[u];)u--;for(;m>=1&&u>=0;m--,u--)if(s[m]!==f[u]){if(m!==1||u!==1)do if(m--,u--,u<0||s[m]!==f[u]){var b=`\n`+s[m].replace(\" at new \",\" at \");return n.displayName&&b.includes(\"<anonymous>\")&&(b=b.replace(\"<anonymous>\",n.displayName)),typeof n==\"function\"&&C.set(n,b),b}while(m>=1&&u>=0);break}}}finally{M=!1,I.current=c,Me(),Error.prepareStackTrace=i}var j=n?n.displayName||n.name:\"\",ye=j?T(j):\"\";return typeof n==\"function\"&&C.set(n,ye),ye}function $e(n,a,t){return ie(n,!1)}function We(n){var a=n.prototype;return!!(a&&a.isReactComponent)}function w(n,a,t){if(n==null)return\"\";if(typeof n==\"function\")return ie(n,We(n));if(typeof n==\"string\")return T(n);switch(n){case D:return T(\"Suspense\");case A:return T(\"SuspenseList\")}if(typeof n==\"object\")switch(n.$$typeof){case F:return $e(n.render);case R:return w(n.type,a,t);case B:{var o=n,i=o._payload,c=o._init;try{return w(c(i),a,t)}catch{}}}return\"\"}var S=Object.prototype.hasOwnProperty,ce={},le=g.ReactDebugCurrentFrame;function O(n){if(n){var a=n._owner,t=w(n.type,n._source,a?a.type:null);le.setExtraStackFrame(t)}else le.setExtraStackFrame(null)}function Ve(n,a,t,o,i){{var c=Function.call.bind(S);for(var d in n)if(c(n,d)){var s=void 0;try{if(typeof n[d]!=\"function\"){var f=Error((o||\"React class\")+\": \"+t+\" type `\"+d+\"` is invalid; it must be a function, usually from the `prop-types` package, but received `\"+typeof n[d]+\"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.\");throw f.name=\"Invariant Violation\",f}s=n[d](a,d,o,t,null,\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\")}catch(m){s=m}s&&!(s instanceof Error)&&(O(i),h(\"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).\",o||\"React class\",t,d,typeof s),O(null)),s instanceof Error&&!(s.message in ce)&&(ce[s.message]=!0,O(i),h(\"Failed %s type: %s\",t,s.message),O(null))}}}var qe=Array.isArray;function Y(n){return qe(n)}function ze(n){{var a=typeof Symbol==\"function\"&&Symbol.toStringTag,t=a&&n[Symbol.toStringTag]||n.constructor.name||\"Object\";return t}}function Ge(n){try{return me(n),!1}catch{return!0}}function me(n){return\"\"+n}function ue(n){if(Ge(n))return h(\"The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.\",ze(n)),me(n)}var v=g.ReactCurrentOwner,He={key:!0,ref:!0,__self:!0,__source:!0},he,fe,$;$={};function Ke(n){if(S.call(n,\"ref\")){var a=Object.getOwnPropertyDescriptor(n,\"ref\").get;if(a&&a.isReactWarning)return!1}return n.ref!==void 0}function Xe(n){if(S.call(n,\"key\")){var a=Object.getOwnPropertyDescriptor(n,\"key\").get;if(a&&a.isReactWarning)return!1}return n.key!==void 0}function Je(n,a){if(typeof n.ref==\"string\"&&v.current&&a&&v.current.stateNode!==a){var t=p(v.current.type);$[t]||(h('Component \"%s\" contains the string ref \"%s\". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',p(v.current.type),n.ref),$[t]=!0)}}function Qe(n,a){{var t=function(){he||(he=!0,h(\"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\",a))};t.isReactWarning=!0,Object.defineProperty(n,\"key\",{get:t,configurable:!0})}}function Ze(n,a){{var t=function(){fe||(fe=!0,h(\"%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\",a))};t.isReactWarning=!0,Object.defineProperty(n,\"ref\",{get:t,configurable:!0})}}var en=function(n,a,t,o,i,c,d){var s={$$typeof:e,type:n,key:a,ref:t,props:d,_owner:c};return s._store={},Object.defineProperty(s._store,\"validated\",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(s,\"_self\",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.defineProperty(s,\"_source\",{configurable:!1,enumerable:!1,writable:!1,value:i}),Object.freeze&&(Object.freeze(s.props),Object.freeze(s)),s};function nn(n,a,t,o,i){{var c,d={},s=null,f=null;t!==void 0&&(ue(t),s=\"\"+t),Xe(a)&&(ue(a.key),s=\"\"+a.key),Ke(a)&&(f=a.ref,Je(a,i));for(c in a)S.call(a,c)&&!He.hasOwnProperty(c)&&(d[c]=a[c]);if(n&&n.defaultProps){var m=n.defaultProps;for(c in m)d[c]===void 0&&(d[c]=m[c])}if(s||f){var u=typeof n==\"function\"?n.displayName||n.name||\"Unknown\":n;s&&Qe(d,u),f&&Ze(d,u)}return en(n,s,f,i,o,v.current,d)}}var W=g.ReactCurrentOwner,be=g.ReactDebugCurrentFrame;function E(n){if(n){var a=n._owner,t=w(n.type,n._source,a?a.type:null);be.setExtraStackFrame(t)}else be.setExtraStackFrame(null)}var V;V=!1;function q(n){return typeof n==\"object\"&&n!==null&&n.$$typeof===e}function _e(){{if(W.current){var n=p(W.current.type);if(n)return`\n\nCheck the render method of \\``+n+\"`.\"}return\"\"}}function rn(n){{if(n!==void 0){var a=n.fileName.replace(/^.*[\\\\\\/]/,\"\"),t=n.lineNumber;return`\n\nCheck your code at `+a+\":\"+t+\".\"}return\"\"}}var pe={};function an(n){{var a=_e();if(!a){var t=typeof n==\"string\"?n:n.displayName||n.name;t&&(a=`\n\nCheck the top-level render call using <`+t+\">.\")}return a}}function Ne(n,a){{if(!n._store||n._store.validated||n.key!=null)return;n._store.validated=!0;var t=an(a);if(pe[t])return;pe[t]=!0;var o=\"\";n&&n._owner&&n._owner!==W.current&&(o=\" It was passed a child from \"+p(n._owner.type)+\".\"),E(n),h('Each child in a list should have a unique \"key\" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',t,o),E(null)}}function ke(n,a){{if(typeof n!=\"object\")return;if(Y(n))for(var t=0;t<n.length;t++){var o=n[t];q(o)&&Ne(o,a)}else if(q(n))n._store&&(n._store.validated=!0);else if(n){var i=Ce(n);if(typeof i==\"function\"&&i!==n.entries)for(var c=i.call(n),d;!(d=c.next()).done;)q(d.value)&&Ne(d.value,a)}}}function tn(n){{var a=n.type;if(a==null||typeof a==\"string\")return;var t;if(typeof a==\"function\")t=a.propTypes;else if(typeof a==\"object\"&&(a.$$typeof===F||a.$$typeof===R))t=a.propTypes;else return;if(t){var o=p(a);Ve(t,n.props,\"prop\",o,n)}else if(a.PropTypes!==void 0&&!V){V=!0;var i=p(a);h(\"Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?\",i||\"Unknown\")}typeof a.getDefaultProps==\"function\"&&!a.getDefaultProps.isReactClassApproved&&h(\"getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.\")}}function on(n){{for(var a=Object.keys(n.props),t=0;t<a.length;t++){var o=a[t];if(o!==\"children\"&&o!==\"key\"){E(n),h(\"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\",o),E(null);break}}n.ref!==null&&(E(n),h(\"Invalid attribute `ref` supplied to `React.Fragment`.\"),E(null))}}function sn(n,a,t,o,i,c){{var d=Be(n);if(!d){var s=\"\";(n===void 0||typeof n==\"object\"&&n!==null&&Object.keys(n).length===0)&&(s+=\" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\");var f=rn(i);f?s+=f:s+=_e();var m;n===null?m=\"null\":Y(n)?m=\"array\":n!==void 0&&n.$$typeof===e?(m=\"<\"+(p(n.type)||\"Unknown\")+\" />\",s=\" Did you accidentally export a JSX literal instead of a component?\"):m=typeof n,h(\"React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\",m,s)}var u=nn(n,a,t,i,c);if(u==null)return u;if(d){var b=a.children;if(b!==void 0)if(o)if(Y(b)){for(var j=0;j<b.length;j++)ke(b[j],n);Object.freeze&&Object.freeze(b)}else h(\"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\");else ke(b,n)}return n===y?on(u):tn(u),u}}var dn=sn;G.Fragment=y,G.jsxDEV=dn})()});var ve=z((jn,Ue)=>{\"use strict\";Ue.exports=je()});var yn={};fn(yn,{default:()=>kn,frontmatter:()=>pn});var r=bn(ve()),pn={title:\"Upstash Core Analytics\",description:\"Low level utilities to build analytics tools on top of Redis.\",date:\"2023-02-13\",url:\"https://console.upstash.com/ratelimit\",repository:\"upstash/core-analytics\",published:!0};function Fe(l){let e=Object.assign({p:\"p\",h2:\"h2\",a:\"a\",span:\"span\",ol:\"ol\",li:\"li\",code:\"code\",div:\"div\",pre:\"pre\",h4:\"h4\",ul:\"ul\"},l.components);return(0,r.jsxDEV)(r.Fragment,{children:[(0,r.jsxDEV)(e.p,{children:`This library offers some low level building blocks to record and analyze custom events in Redis.\nIt's main purpose is to provide a simple way to record and query events in Redis without having to worry about the underlying data structure so we can build more advanced analytics features on top of it.`},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:12,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.h2,{id:\"quickstart\",children:[(0,r.jsxDEV)(e.a,{className:\"subheading-anchor\",\"aria-label\":\"Link to section\",href:\"#quickstart\",children:(0,r.jsxDEV)(e.span,{className:\"icon icon-link\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this),\"Quickstart\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:15,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.ol,{children:[`\n`,(0,r.jsxDEV)(e.li,{children:\"Create a redis database\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:18,columnNumber:1},this),`\n`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:18,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.p,{children:[\"Go to \",(0,r.jsxDEV)(e.a,{href:\"https://console.upstash.com/redis\",children:\"console.upstash.com/redis\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:20,columnNumber:7},this),` and create\na new global database.`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:20,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.p,{children:[\"After creating the db, copy the \",(0,r.jsxDEV)(e.code,{children:\"UPSTASH_REDIS_REST_URL\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:23,columnNumber:33},this),\" and \",(0,r.jsxDEV)(e.code,{children:\"UPSTASH_REDIS_REST_TOKEN\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:23,columnNumber:62},this),\" to your \",(0,r.jsxDEV)(e.code,{children:\".env\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:23,columnNumber:97},this),\" file.\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:23,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.ol,{start:\"3\",children:[`\n`,(0,r.jsxDEV)(e.li,{children:[\"Install \",(0,r.jsxDEV)(e.code,{children:\"@upstash/analytics\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:25,columnNumber:12},this),\" in your project\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:25,columnNumber:1},this),`\n`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:25,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"bash\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"bash\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"npm\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:104},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:143},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:\"install\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:180},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:223},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:\"@upstash/analytics\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:260},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:314},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:\"@upstash/redis\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:351},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:27,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.ol,{start:\"4\",children:[`\n`,(0,r.jsxDEV)(e.li,{children:\"Create an analytics client\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:31,columnNumber:1},this),`\n`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:31,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"ts\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"ts\",\"data-theme\":\"default\",children:[(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"import\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:104},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" { Analytyics } \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:146},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"from\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:198},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:238},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"@upstash/analytics\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:275},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\";\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:341},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"import\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" { Redis } \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:62},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"from\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:109},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:149},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"@upstash/redis\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:186},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\";\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:248},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"const\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:61},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:\"analytics\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:98},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:143},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"=\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:180},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:217},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"new\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:254},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:293},this),(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"Analytics\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:330},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"({\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:375},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" redis: Redis.\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"fromEnv\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:71},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"(),\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:114},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" window: \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:6,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"1d\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:6,columnNumber:66},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:6,columnNumber:116},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:6,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"});\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:7,columnNumber:20},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:7,columnNumber:1},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:33,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.ol,{start:\"5\",children:[`\n`,(0,r.jsxDEV)(e.li,{children:\"Ingest some events\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:44,columnNumber:1},this),`\n`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:44,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.p,{children:[\"An event consists of a \",(0,r.jsxDEV)(e.code,{children:\"time\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:46,columnNumber:24},this),\" field and any additional key-value pairs that you can use to record any information you want.\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:46,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"ts\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"ts\",\"data-theme\":\"default\",children:[(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"const\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:104},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:145},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:\"event\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:182},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:223},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"=\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:260},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" {\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:297},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" time: Date.\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"now\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:69},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"() \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:108},this),(0,r.jsxDEV)(e.span,{style:{color:\"#6A737D\"},children:\"// optional (default: Date.now())\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:147},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" userId: \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"chronark\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:66},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:122},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" page: \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"/auth/login\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:64},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:123},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" country: \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"DE\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:67},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:117},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:5,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"}\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:6,columnNumber:20},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:6,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:7,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"await\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" analytics.\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:61},this),(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"ingest\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:108},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"(\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:150},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"pageviews\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:187},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\", event);\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:244},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:8,columnNumber:1},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:48,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.ol,{start:\"4\",children:[`\n`,(0,r.jsxDEV)(e.li,{children:\"Query your events\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:59,columnNumber:1},this),`\n`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:59,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"ts\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"ts\",\"data-theme\":\"default\",children:[(0,r.jsxDEV)(e.span,{className:\"line\",children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"const\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:61},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:\"result\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:98},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:140},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"=\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:177},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:214},this),(0,r.jsxDEV)(e.span,{style:{color:\"#F97583\"},children:\"await\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:251},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" analytics.\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:292},this),(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"query\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:339},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"(\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:380},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"pageviews\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:417},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\");\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:474},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:1},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:61,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.h2,{id:\"development\",children:[(0,r.jsxDEV)(e.a,{className:\"subheading-anchor\",\"aria-label\":\"Link to section\",href:\"#development\",children:(0,r.jsxDEV)(e.span,{className:\"icon icon-link\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this),\"Development\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:67,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.p,{children:[\"This project uses \",(0,r.jsxDEV)(e.code,{children:\"pnpm\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:69,columnNumber:19},this),\" for dependency management.\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:69,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.h4,{id:\"install-dependencies\",children:[(0,r.jsxDEV)(e.a,{className:\"subheading-anchor\",\"aria-label\":\"Link to section\",href:\"#install-dependencies\",children:(0,r.jsxDEV)(e.span,{className:\"icon icon-link\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this),\"Install dependencies\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:71,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"bash\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"bash\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"pnpm\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:104},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:144},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:\"install\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:181},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:73,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.h4,{id:\"build\",children:[(0,r.jsxDEV)(e.a,{className:\"subheading-anchor\",\"aria-label\":\"Link to section\",href:\"#build\",children:(0,r.jsxDEV)(e.span,{className:\"icon icon-link\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this),\"Build\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:77,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"bash\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"bash\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#B392F0\"},children:\"pnpm\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:104},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:144},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:\"build\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:181},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:79,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.h2,{id:\"database-schema\",children:[(0,r.jsxDEV)(e.a,{className:\"subheading-anchor\",\"aria-label\":\"Link to section\",href:\"#database-schema\",children:(0,r.jsxDEV)(e.span,{className:\"icon icon-link\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this),\"Database Schema\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:84,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.p,{children:[\"All metrics are stored in Redis \",(0,r.jsxDEV)(e.code,{children:\"Hash\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:86,columnNumber:33},this),\" data types and sharded into buckets based on the \",(0,r.jsxDEV)(e.code,{children:\"window\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:86,columnNumber:89},this),\" option.\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:86,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.pre,{children:(0,r.jsxDEV)(e.code,{children:`@upstash/analytics:{TABLE}:{TIMESTAMP}\n`},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:87,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:87,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.ul,{children:[`\n`,(0,r.jsxDEV)(e.li,{children:[(0,r.jsxDEV)(e.code,{children:\"TABLE\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:90,columnNumber:3},this),\" is a namespace to group events together. ie for managing multiple projects int a single database\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:90,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.li,{children:[(0,r.jsxDEV)(e.code,{children:\"TIMESTAMP\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:91,columnNumber:3},this),\" is the starting timestamp of each window\"]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:91,columnNumber:1},this),`\n`]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:90,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.p,{children:\"The field of each hash is a serialized JSON object with the user's event data and the value is the number of times this event has been recorded.\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:93,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.div,{\"data-rehype-pretty-code-fragment\":\"\",children:(0,r.jsxDEV)(e.pre,{\"data-language\":\"json\",\"data-theme\":\"default\",children:(0,r.jsxDEV)(e.code,{\"data-language\":\"json\",\"data-theme\":\"default\",children:[(0,r.jsxDEV)(e.span,{className:\"line\",children:(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"{\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:104},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:85},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#FDAEB7\",fontStyle:\"italic\"},children:\"'{\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:58},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:'\"page\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:120},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\": \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:172},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"/auth/login\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:210},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:269},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:'\"country\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:306},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\": \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:361},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"DE\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:399},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"}': \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:449},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:\"5\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:493},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:530},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:2,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:[(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\" '{\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:20},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:'\"page\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:64},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\": \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:116},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"/auth/login\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:154},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\",\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:213},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:'\"country\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:250},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\": \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:305},this),(0,r.jsxDEV)(e.span,{style:{color:\"#9ECBFF\"},children:'\"US\"'},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:343},this),(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"}': \"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:393},this),(0,r.jsxDEV)(e.span,{style:{color:\"#79B8FF\"},children:\"2\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:437},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:3,columnNumber:1},this),`\n`,(0,r.jsxDEV)(e.span,{className:\"line\",children:(0,r.jsxDEV)(e.span,{style:{color:\"#E1E4E8\"},children:\"}\"},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:20},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:4,columnNumber:1},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:79},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)},void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:95,columnNumber:1},this)]},void 0,!0,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\",lineNumber:1,columnNumber:1},this)}function Nn(l={}){let{wrapper:e}=l.components||{};return e?(0,r.jsxDEV)(e,Object.assign({},l,{children:(0,r.jsxDEV)(Fe,l,void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this)}),void 0,!1,{fileName:\"/Users/andreasthomas/github/chronark/chronark.com/content/projects/_mdx_bundler_entry_point-95108577-d054-4fa4-9876-096009670ad0.mdx\"},this):Fe(l)}var kn=Nn;return _n(yn);})();\n/*! Bundled license information:\n\nreact/cjs/react-jsx-dev-runtime.development.js:\n (**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *)\n*/\n;return Component;"
|
|
},
|
|
"_id": "projects/upstash-core-analytics.mdx",
|
|
"_raw": {
|
|
"sourceFilePath": "projects/upstash-core-analytics.mdx",
|
|
"sourceFileName": "upstash-core-analytics.mdx",
|
|
"sourceFileDir": "projects",
|
|
"contentType": "mdx",
|
|
"flattenedPath": "projects/upstash-core-analytics"
|
|
},
|
|
"type": "Project",
|
|
"path": "/projects/upstash-core-analytics",
|
|
"slug": "upstash-core-analytics"
|
|
} |