Git Product home page Git Product logo

projectx-codehagen / badget Goto Github PK

View Code? Open in Web Editor NEW
2.1K 19.0 221.0 4.19 MB

Badget aims to simplify financial management with a user-friendly interface and robust backend

Home Page: https://www.badget.io/

License: GNU Affero General Public License v3.0

TypeScript 97.61% MDX 1.55% JavaScript 0.62% CSS 0.22%
next-auth nextjs open-source prisma resend-email tailwind tailwindcss typescript

badget's People

Contributors

akkikumar72 avatar alexghirelli avatar ameer2468 avatar amzamani avatar auxibee avatar codingsagar avatar donaminos avatar efosaso avatar gavinarori avatar jakobhoeg avatar jamessingleton avatar ksyhoo avatar laerte avatar matteobad avatar meglerhagen avatar miralsuthar avatar muzammilkhattri avatar neerajkumarc avatar ousszizou avatar pablo-kitz avatar palmithor avatar pdovhomilja avatar piyusharmap avatar rahulvramesh avatar shouryan01 avatar sourabpramanik avatar syedmuzamilm avatar utkarz18 avatar veerbal1 avatar yaricherchi7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

badget's Issues

Improvement: Update Navbar position Dashboard

Improvement Description

The current layout of the navigation bar in our application is cluttered, and key navigation items are not optimally positioned for user access. The objective is to relocate these items to the highlighted area in the screenshot provided to enhance the user interface and improve overall navigation flow.

Additional Context

Please refer to the attached screenshot that illustrates the current state of the navigation bar and the intended location for the moved items.

image

Feature: Enable TS strictness

Type of feature

๐Ÿ’ก Feature

Current behavior

TS is not in strict mode. This doesn't allow us to have strict checks. More importantly:

  • We cannot enable some ESLINT recommended rules for typescript
  • It is against the TRPC suggestions

Suggested solution

Enable the following in the @projectx/tsconfig/base.json:

...
"strict": true,
"noUncheckedIndexedAccess": true
...

Additional context

No response

Feature: Update sync and new data in /investment

Type of feature

๐Ÿ’ก Feature

Current behavior

Issue Overview

Below is a list of what i think we need in order to fix this page.

Task List

  • Task 1: Enable Click Interaction on Equity
  • Task 2: Develop a New Component Based on Draft
  • Task 3: Make New Data Fields That Match

Detailed Task Descriptions

Task 1: Enable Click Interaction on Equity

Description:
Users are currently unable to interact with the equity component through clicking. Implement functionality to allow users to click on the equity, leading to the desired action or detail display.

Acceptance Criteria:

  • Clicking on the equity row triggers the appropriate action.
  • Updates the corresponding data on the right side when clicked.

image


Task 2: Develop a New Component Based on Draft

Description:
A new component is required as per the draft in the attached picture. This component should integrate seamlessly with the existing application layout and functionality.

Acceptance Criteria:

  • New component matches the design and functionality outlined in the draft.
  • Integrates well with the current application without causing any layout or functional issues.

image


Task 3: Make New Data Fields That Match

Description:
With the introduction of the new component, additional data fields need to be created and integrated. These data fields should be designed to support the functionalities of the new component and should align with the existing data structure.

Acceptance Criteria:

  • Creation of new data fields that are compatible with the new component.
  • Successful integration of these fields into the current application, ensuring data consistency and functionality.

image


Draft of full picture

image

Suggested solution

No response

Additional context

No response

Feature: Stankey Diagram Examples

It might require some personalization or data entry, but I figured a total cash flow view would be a great overview, then a few sub views that allow you to drill down into specific categories like spending, budget categories, or specific vendors you would see on transactions

An example pasted below using Sankey Diagrams
"""
Wages [5000] Income

Dividends [50] Income

Income [250] Deductions

Income [1200] Taxes

Income [200] Post-Tax Deductions

Income [3700] Net Pay

Deductions [14.38] Dental

Deductions [90.78] Medical

Deductions [3.50] Vision

Taxes [307.11] Social Security

Taxes [71.82] Medicare

Taxes [775.30] Federal Withholding

Taxes [214.00] State Tax

Post-Tax Deductions [200] 401(k)

Post-Tax Deductions [5] Pre-Paid Legal Plan

Net Pay [2506.19] Fidelity

Fidelity [131.90] Emergency Fund

Fidelity [900] Rent

Fidelity [50] Utilities

Fidelity [150] Transportation

Fidelity [650] Food and Dining

Fidelity [10] Subscriptions

Fidelity [450] Entertainment

Transportation [50] Gas/Fuel

Subscriptions [10] ChatGPT Plus

Food and Dining [150] Groceries

Food and Dining [500] Dining Out

"""

Bug: Vertical scrolling is not enabled in /dashboard layout

Describe the bug

There is an issue with the vertical scrolling -which is not enabled - in the /dashboard page.
It makes the footer currently not visible.

image

Steps to reproduce

  1. Go to 'dashboard/transactions' & 'dashboard/accounts'
  2. Now try to scroll vertically .
  3. Nothing happens and the footer does not show up. Also, the main content is truncated at the bottom.

Browsers

Chrome, Firefox

Additional context (Is this in dev or production?)

No response

Feature: Update blog posts

Summary

Need to update blogpost from Propwrite -> ProjectX

Detailed Explanation

To keep this fast I copied some blogposts from another project I did. We need to update this so it fits ProjectX

Additional Information

Picture for reference

image

Improvement: ByPass Goodle Sign If logged In From local Environment

Please write under what you want to add.

Title

ByPass Goodle Sign If logged In From local Environment

Improvement Description

ByPass Goodle Sign If logged In From local Environment

Proposed Solution

If I Hit In Sign In , Directly Sign In . But this may load to severl changes .
Have A Normal Sign In as well with email and password. From DB we'll create a super admin uiser. from which we can login.

I can pick this up. If its a prioirty for you

Make Investment Middle scrollable <Scrollarea>

We need to make the area scrollable. Right now it stops at the end of the page.
It is working in this component - /components/transactions/components/transactions-dashboard.tsx
You can see this in the transaction tab.

Screenshot:
jam-screenshot

Full screen:
jam-full-url-screenshot

-------------------------------------

Website URL:
http://localhost:3000/dashboard/investments

Device and browser info:
Chrome 120.0.6099.216 (1440x788) | Mac OS (arm) 10.15.7

Date and time:
January 16th 2024 | 8:01pm UTC

View developer information (console logs, network requests & timing):
jam.dev/c/76d49f5e-7357-4296-999c-7de4134dca84

-------------------------------------

Improvement: Horizontal Scroll for Smaller Stock Tickers

Title

For smaller stock tickers, the should allow horizontal scrolling to accommodate the content size. This should do so if there is any overlay the user will be able to scroll to see all the tickers.

Proposed Solution

Look at the documentation at https://ui.shadcn.com/docs/components/scroll-area to see how its setup.

Additional Context

Picture of the component under.
You can find it at/components/investments/components/small-investment-card.tsx

Screenshot (32)

Feature: Update docs to get started

Type of feature

๐Ÿ“ Documentation

Current Behavior

Currently, our project documentation lacks detailed instructions for setting up the project locally. This gap can hinder new contributors from getting started and contributing to the project effectively.

Problem Statement

Our /docs section at https://projectx-eight-gilt.vercel.app/docs needs a comprehensive update to make the initial setup process for contributors smoother and more straightforward. There's a clear need to enrich our documentation with step-by-step instructions on how to set up the project locally, ensuring that new contributors can easily navigate their way through their initial setup and contribution.

Proposed Solution

I propose we expand the /docs section to include:

  • Detailed instructions for setting up the project locally, covering prerequisites, installation steps, and common troubleshooting tips.
  • A clear explanation of the project structure and key components to help contributors understand where and how they can contribute.
  • Links to additional resources or tools that contributors might find useful during their setup process.

This update will not only facilitate a better onboarding experience for new contributors but also enhance the overall contribution process by providing clear guidelines and reducing setup friction.

useSearchParams() Requires Suspense Boundary in CSR Pages - After update to nextjs 14.1.0

Describe the bug
When using useSearchParams() from next/navigation in Next.js application, I encounter errors stating that useSearchParams() should be wrapped in a Suspense boundary on specific pages ("/login" and "/register").
Despite wrapping the component using useSearchParams() within a Suspense boundary, the error persists.

Error Message:

โจฏ useSearchParams() should be wrapped in a suspense boundary at page "/login". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

Error occurred prerendering page "/login". Read more: https://nextjs.org/docs/messages/prerender-error

โจฏ useSearchParams() should be wrapped in a suspense boundary at page "/register". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

Error occurred prerendering page "/register". Read more: https://nextjs.org/docs/messages/prerender-error

To Reproduce
Steps to reproduce the behavior:

  1. git pull latest on main
  2. yarn build

Additional context
Here is a link for what we need to do:
https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

Contribute to Our OSS Friends Page on Next.js Site

Issue Description
We're looking to add an OSS Friends page to our Next.js website, as inspired by the concept explained in this article. This page will showcase various open-source projects and celebrate the spirit of community collaboration.

Rationale
This addition will not only enhance our website's functionality but also foster a sense of community by highlighting the contributions and projects of our fellow developers.

Proposed Solution
Follow the guidelines outlined in the article, which includes using the Formbricks API to fetch OSS projects and implementing this feature in our existing Next.js framework.

Here is the code

// app/oss-friends/page.tsx
import { Button } from "@/components/ui/button";
import Image from "next/image";

type OSSFriend = {
  href: string;
  name: string;
  description: string;
};

export default function Friends() {
  const friends: OSSFriend[] = await fetch(
    "https://formbricks.com/api/oss-friends",
    {
      next: {
        revalidate: 3600,
      },
    }
  )
    .then(async (res) => res.json())
    .then(({ data }) => data)
    .catch(() => []);

  return (
    <div className="bg-white px-6 py-24 sm:py-32 lg:px-8 ">
      <div className="mx-auto max-w-2xl text-center">
        <h2 className="text-4xl font-bold tracking-tight text-gray-900 sm:text-6xl">
          Open Source Friends
        </h2>
        <p className="mt-4 text-lg leading-8 text-gray-600">
          Meet our friends who also building and contributing to Open Source.
        </p>
      </div>
      <ul
        role="list"
        className=" mt-12 grid grid-cols-1 gap-x-6 gap-y-8 lg:grid-cols-3 xl:gap-x-8">
        {friends.map((friend) => (
          <li
            key={friend.name}
            className="overflow-hidden rounded-xl border border-gray-200 flex flex-col justify-between">
            <div>
              <div className="text-xl font-medium leading-6 text-gray-900 pb-1 px-6">
                {friend.name}
              </div>
              <p className="px-6 mt-2 text-gray-600 text-sm ">
                {friend.description}
              </p>
            </div>
            <div className="text-left px-6">
              <a
                href={friend.href}
                target="_blank"
                rel="noopener noreferrer"
                className="inline-block w-full">
                <Button
                  type="button"
                  className="mt-4 mb-6 rounded-md bg-black text-sm font-semibold text-white shadow-sm">
                  Learn more
                </Button>
              </a>
            </div>
          </li>
        ))}
      </ul>
    </div>
  );
}

Additional Context
Feel free to propose any creative ideas or enhancements that could make the OSS Friends page more engaging and useful. We're open to innovative approaches and designs.

Feature: Remove "plaid" references from DB models

Type of feature

๐Ÿง‘โ€๐Ÿ’ป Refactor

Current behavior

We need to remove every references to "Plaid" form our DB model and make them totally agnostic in order to set the stage for our "data aggregator" package. This refactor will be vital because it allows us to store and many types of data from different data sources in one single way.

Suggested solution

  • Remove all columns closely related to Plaid.
  • Check the differences between Plaid and GoCardless API response payloads and try to keep the most common fields between both.

Additional context

https://developer.gocardless.com/bank-account-data/overview, https://plaid.com/docs/api/

Bug: stripe: not found

Describe the bug

Seems that is necessary to have stripe cli: https://stripe.com/docs/stripe-cli installed, to bypass i removed dev entry from scripts on stripe/package.json file but now i get a black screen when i try to access the UI (and 401 Unauthorized on console log), it's a stripe account mandatory to run project locally?

@projectx/stripe:dev: 
@projectx/stripe:dev: > @projectx/[email protected] dev /home/urahara/Projects/projectx/packages/stripe
@projectx/stripe:dev: > stripe listen --forward-to localhost:3000/api/webhooks/stripe
@projectx/stripe:dev: 
@projectx/stripe:dev: sh: 1: stripe: not found
@projectx/stripe:dev: โ€‰ELIFECYCLEโ€‰ Command failed.
@projectx/stripe:dev: ERROR: command finished with error: command (/home/urahara/Projects/projectx/packages/stripe) /home/urahara/.local/share/pnpm/pnpm run dev exited (1)
@projectx/stripe#dev: command (/home/urahara/Projects/projectx/packages/stripe) /home/urahara/.local/share/pnpm/pnpm run dev exited (1)

 Tasks:    0 successful, 2 total
Cached:    0 cached, 2 total
  Time:    496ms 
Failed:    @projectx/stripe#dev

 ERROR  run failed: command  exited (1)
โ€‰ELIFECYCLEโ€‰ Command failed with exit code 1.

Steps to reproduce

  1. Configure project locally
  2. Run command pnpm run dev

Browsers

No response

Additional context (Is this in dev or production?)

No response

Bug: After signing in the user is not redirected to the dashboard

Describe the bug
After sign up/sign in the user is directed back to the main page, which contains the "Get Started" button and prompts for signing again

To Reproduce
Steps to reproduce the behavior:

  1. Go to Landing page
  2. Click on get stared
  3. Sign Up / Log In
  4. Redirection is made back to the landing page
  5. Get started button prompts sign up / log in again

Expected behavior

  • After signing in, the user should be redirected to the dashboard or an boarding page to be able to use the app.

Feature: add database package

Type of feature

๐Ÿ’ก Feature

Current behavior

We have to implement a database package that can implement all the required tables to collect data from external connections (ex. finance aggregators, banks, investment brokers etc.)

Suggested solution

This can be the structure of the DB. Badget

Additional context

No response

Feature: More stock cards on Investment page

Type of feature

๐Ÿ’ก Feature

Current behavior

We need more cards to get mapped to the row with relevant stocks.

image

Suggested solution

No response

Additional context

No response

Bug: linting warnings

Describe the bug

On running yarn build or yarn lint there are lots of warnings logging.

Steps to reproduce

Run command yarn lint

Browsers

No response

Additional context (Is this in dev or production?)

No response

Feature: Open Project Transparency Website

Type of feature

๐Ÿ’ก Feature

Current behavior

No current implementation of an Open Project Transparency website.

Suggested solution

Develop a website similar to Cal.com's Open Startup. The website should display real-time metrics, project updates, and other relevant information about our open projects. It should emphasize transparency and community engagement.

Additional context

No response

Feature: Footer on /Dashboard alot of white space

Title

There is an issue with the footer on the /dashboard page of our application. Currently, the footer the footer is too big and blocks some of the screen.

Improvement Description

The footer on the /dashboard page is currently oversized, encroaching upon the usable screen space and potentially obscuring content. A redesign or adjustment is necessary to ensure that the footer maintains an appropriate size without compromising the user interface and experience.

Additional Context

The screenshot above shows the current state of the footer on the /dashboard page where it is not properly aligned. This issue is visible when the content above does not fill the viewport height.

image

Improvments: Make it into a monorepo / Turborepo

Convert Existing Repository into a TurboRepo Monorepo

Improvement Description

This issue proposes the transformation of our current repository into a TurboRepo, reorganizing it into a monorepo structure. This change aims to streamline our development workflow, enhance build performance, and improve the management of interdependent projects within our codebase.

Rationale

The primary motivation for this transition is to leverage TurboRepo's efficient task runner and smart caching mechanisms. These features will significantly speed up our build and test processes. Given our growing codebase and the increasing interconnectivity of our projects, adopting a monorepo structure will facilitate better project management and collaboration.

Proposed Solution

  • Initialize Turbo: Run npx create-turbo@latest at the root of the project to set up Turbo.
  • Configure Turbo: Edit the turbo.json file to define tasks and pipelines.
  • Reorganize Codebase: Structure the repository into separate folders for each project or package, ensuring a clean monorepo setup.
  • Update package.json: Ensure each project has a package.json with the necessary scripts.
  • Adopt Yarn/npm Workspaces: Use Yarn or npm Workspaces for managing dependencies across our projects.
  • Testing and Debugging: Extensively test the new setup to ensure compatibility and efficiency.

Additional Context

The transition to a TurboRepo will be a significant change in our development process, requiring thorough testing and potential adjustments in our CI/CD pipelines. Documentation will be updated to reflect these changes and guide the team through the new workflow.

Improvement: SVG logo for table Investment Dashboard

Title

See link for the tweet: https://twitter.com/pJacquelDesign/status/1742834610533253604
Thank you https://twitter.com/pJacquelDesign for the feedback โœจ

Improvement Description

Could it be possible to have to logos of the company for faster visual recognition? :)

Proposed Solution

Make logo conditional render based on what Company is in the data list (source code)

Alternatives (optional)

Here is somewhere you can make SVGs:

Like this fee API: https://clearbit.com/logo

Or word vector logos : https://worldvectorlogo.com

image

Feature: White blank space issue when resizing internal UI component (on right side)

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'dashboard/transactions' & 'dashboard/accounts'
  2. Decrease right section width as minimum as possible - using resizable button
  3. Now try to scroll horizontally.
  4. See window get white blank space on right side and causing scrolling on x-axis

Expected behavior
It should not scroll when we decrease width using resize button our internal UI components

Screenshots
Screenshot 2024-01-22 at 3 11 21 PM

Desktop (please complete the following information):

  • OS: MacOS Intel Chip (Viewport 1440x900)
  • Browser: Arc

Feature: Add Account Modal

Type of feature

๐Ÿ’ก Feature

Current behavior

Problem Description:

Currently, we need a new modal where users can add a bank integration. This feature is still in the planning stage, as the backend for this functionality is not yet ready. In the interim, we will use mock data.

Location:

This modal should be implemented on the /accounts page
image

Suggested solution

Design a Dialog-Based Interface:

Utilize a dialog component for displaying the list of banks. Reference for dialog component:
Dialog Component Documentation.

Bank Listing:

The dialog should present a comprehensive list of banks, ideally with their logos and names.
This list should include a search feature at the top to allow users to easily find their banks.

Form Integration:

Consider integrating a form component with a Combobox for improved user interaction.
Reference for the combobox component: Combobox Component Documentation.

Example draft
image

Sample JSON - Edit if you find something better, this is just a draft

{
  "banks": [
    {
      "id": 1,
      "name": "Nordic Bank",
      "logoUrl": "https://path-to-nordic-bank-logo.png",
      "country": "Norway",
      "services": ["Savings", "Checking", "Loans", "Investments"],
      "websiteUrl": "https://www.nordicbank.no"
    },
    {
      "id": 2,
      "name": "Arctic Financial",
      "logoUrl": "https://path-to-arctic-financial-logo.png",
      "country": "Norway",
      "services": ["Savings", "Mortgages", "Credit Cards"],
      "websiteUrl": "https://www.arcticfinancial.no"
    },
  ]
}

Additional context

No response

Test

Test descriptiopon

Feature: New page - Introduction to Contriib

Type of feature

๐Ÿ’ก Feature

Current behavior

We dont have documentation on how we people can contribute.
Look at this as an example https://docs.opensauced.pizza/contributing/introduction-to-contributing/

Suggested solution

I would like a page like this: https://docs.opensauced.pizza/contributing/introduction-to-contributing/
We can make the documentation also as a blog like this - https://projectx-eight-gilt.vercel.app/blog/propwrite_aI_real_estate_blog_post

Additional context

No response

Improvement: Update from <img> to <Image>

Title

We need to update from img to Image. You can see the error if you yarn build

./components/investments/components/holdings-table.tsx
155:10 Warning: Usingcould result in slower LCP and higher bandwidth. Consider usingfromnext/image to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element @next/next/no-img-element

image

Improvement: Fix text sign in dialog

Title

Update the text for the dialog so that it reflects the project. The text right now its from a prev project.

Additional Context

Se picture to understand
image

Improvement: Centralized Default Position for Handle Panel:

Title

Currently, the right handle panel is locked to the right side. The default position should be centered.

Improvement Description

The panel should be split, something like this picture on default.
image

Proposed Solution

We need to look at the documentation code to see what we can find. I think the picture down should guide is in the right direction.

Additional Context

Under you is screenshot from Shadcn and our project

Shadcn:
image

Our application:
image

Under you can see the diffrence from Shadcn code and our. Im getting a error message for this:
image

Perf: Replace CI build step with typecheck

Describe the bug

We could replace the GitHub Action "build" step with a "typecheck", basically a build with no-emit to reduce time

Steps to reproduce

  1. Replace pnpm run build with pnpm run typecheck

Browsers

No response

Additional context (Is this in dev or production?)

CI

Update data.ts to sync panels

Currently, our interface shows hardcoded data on the right panel when a user selects a stock or an account. We need to modify this behavior to dynamically update these fields with actual stock data retrieved from data.ts, replacing the hardcoded content.

This you can see working on the Accounts page

Screenshot:
jam-screenshot

Full screen:
jam-full-url-screenshot

-------------------------------------

Website URL:
http://localhost:3000/dashboard/investments

Device and browser info:
Chrome 120.0.6099.216 (1440x788) | Mac OS (arm) 10.15.7

Date and time:
January 16th 2024 | 8:07pm UTC

View developer information (console logs, network requests & timing):
jam.dev/c/c2e2e33a-2752-4cad-b1ad-252c54a3f670

Header does not align with side panel

Describe the bug
Each page Header eg Dashboard does not align with the sidepanel.

Expected behavior
The header should align vertically with the sidebar.

Screenshots
CleanShot 2024-01-04 at 00 02 24@2x

This is what it looks like when it is aligned.
CleanShot 2024-01-04 at 00 01 37@2x

Additional context
The combobox on the right is set to have a height of 52px, so setting the header to have the same should ensure they are vertically aligned.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.