Patrick Wetherbee

Full Stack Developer

AI/Chatgpt 🤖
Website 🌐
Research 📚
Web3 ⛓️
Discord 👾

Rad(a)r
AI/Chatgpt 🤖

Mar 2024
Next.js
Perplexity AI
WebSockets
ChatGPT

A web app that uses Perplexity AI to search daily for events related to users questions. For example, if a user asks "Is the Winds of Winter out yet today?" The bot will search every day for the answer, and alert the user if there is new, relevant information
Rad(a)r

AI Video-Quiz Generator
AI/Chatgpt 🤖

Feb 2024
Next.js
ChatGPT
YouTube API
Generative UI

A web app that uses ChatGPT to generate a quiz based on a video. The user can input a youtube video link, and the app will generate a quiz based on the content of the video.
AI Video-Quiz Generator

Sift
AI/Chatgpt 🤖

Aug 2023
React
Express.js
Redis
TypeScript
Manifest v3
ChatGPT

Chrome extension that uses ChatGPT to filter out social media content that you don't want to see. The user can define their own custom filters that operate alongside defaults.
Sift


    **The following is the system prompt given to ChatGPT:**

    Role: AI content filter.

    Task: Evaluate social media posts using provided filters.
    
    Input:
    - JSON with 'filters' and 'textItems'.
      - 'filters' includes 'custom' (active filters) and 'defaults' (categories like "politics").
      - 'textItems' are posts to be evaluated with 'id' and 'text'.
      - 'config' holds 'filterStrength' (1-10).
    
    Output: 
    - Array of {'id', 'hide', 'reason'}.
      - 'id' matches text item's id.
      - 'reason' explains decision (<10 words).
      - 'hide' is boolean: filter out (true) or not (false).
    - Encase array in "--[" and "]--".
    
    Note: Unflagged items are allowed.

    Example:
    User JSON:
    {
      "filterConfig": {
        "filters": {
          "custom": [{"active": true, "text": "no dogs"}],
          "defaults": ["politics", "spam"]
        },
        "strength": 3
      },
      "textItems": [
        {"id": "id_1", "text": "I love dogs"},
        ...
      ],
      "config": {"filterStrength": 3}
    }

    Output:
    "--[
      {"id": "id_1", "hide": true, "reason": "text mentions dogs"},
      ...
    ]--
    
This is the system prompt given to ChatGPT, which is used to generate the filter decisions. Note that the reason is given before the decision boolean, so that the agent can reason out the decision before making it.

Leviti.io
Website 🌐

Aug 2021 - Aug 2023
React
TypeScript
Next.js
GraphQL
Material UI
Playwright
Django

Architected and built a full stack web application that streamlines the process of planning and executing micro-events. The web app includes dashboards, a chat feature, a marketplace, and a wysiwyg editor.
Leviti.io

RNN Trading Bot
AI/Chatgpt 🤖

Jul 2021
Python
Pytorch
Matplotlib

Python script that uses a recurrent neural network to predict the price of Ethereum. The script uses the pytorch library to train the model and the matplotlib library to plot the data.
RNN Trading Bot

    class rnn_model(nn.Module):
    def __init__(self, input_size, n_hidden, n_layers, n_out):
        super().__init__()
        
        self.n_hidden=n_hidden
        self.n_layers = n_layers
        self.lstm = nn.LSTM(input_size, n_hidden, n_layers, batch_first = True, dropout = 0.3)
        self.fcn1 = nn.Linear(n_hidden, 128)
        self.fcn2 = nn.Linear(128, n_out)#single value for regression
        
        self.dropout = nn.Dropout(0.2)
        
    def forward(self, x, hidden):
        #x input shape is (batch_size, seq_len, features)
        lstm_out, hidden = self.lstm(x)
        lstm_out = lstm_out.contiguous().view(-1,self.n_hidden) #reshape lstm output for fcl
        output=self.fcn1(lstm_out)
        output = self.dropout(output)
        output=self.fcn2(output)
        #sig_out = self.sig(output)
        #print(x.size(0))
        output = output.view(x.size(0),-1)
        return output[:,-1], hidden #return last prediction for each batch, and the hidden state
    
    def init_hidden(self,batch_size):
        
        weight = next(self.parameters()).data
        
        if (train_on_gpu):
            hidden = (weight.new(self.n_layers, batch_size, self.n_hidden).zero_().cuda(),
                  weight.new(self.n_layers, batch_size, self.n_hidden).zero_().cuda())
        else:
            hidden = (weight.new(self.n_layers, batch_size, self.n_hidden).zero_(),
                      weight.new(self.n_layers, batch_size, self.n_hidden).zero_())
        
        return hidden
        
rnn = rnn_model(1,64,2,1)
rnn
    
This is the code that defines the RNN model, using the pytorch library.

CipherForums
Website 🌐

Apr 2020 - Nov 2021
React
Material UI
AES
WebSockets

React application that includes a novel, cryptographically secure communication platform using AES encryption. Users can create posts and chat using client-side provided private keys, in a no-trust environment.
CipherForums

CryptoSearch
Research 📚

May 2021
Python
Multiprocessing
Rainbow Tables
BigQuery

Cybersecurity project that uses a python script that searches for crypto wallets (eth and btc) that are signed with a rainbow table of hashed cracked passwords from the public domain, and interfaces with Google BigQuery. The script uses the multiprocessing library to run around 700k signs per second.
CryptoSearch

    @staticmethod
    def poolFunction(seed):
        ch.setCoin(cf.COIN)
        ch.setEncoder(cf.ENCODER)
        ch.setHasher(cf.HASHER)
        pkey = ch.getHash(seed)
        addy = ch.getAddress(pkey, address_type=cf.BTC_ADDRESS_TYPE)
        seed = seed.replace(',', 'CMA')
        return f'{seed}	,{pkey},{addy}'

    def generateAddressText(self, seeds):
        # stop here
        addressList = [line for line in self.map(
            self.poolFunction, seeds, chunksize=self.chunksize)]
        addressString = ''.join(addressList)
        return addressString
    
This is the code that uses the multiprocessing library to run the poolFunction on a list of seeds.

Tez Planets
Web3 ⛓️

May 2021
JavaScript
HTML
Tezos
IPFS
Three.js

NFT project that uses html and javascript and the tezo GQL api to self-reference, allowing buyers to be a part of the NFT. This project uses the IPFS protocol to host the NFT html file, and the Tezos blockchain to host the metadata. It also makes use of the three.js library to render the 3d planets.

House of Ivory
Website 🌐

Apr 2022
React
Next.js
Material UI
Vimeo API
Strapi
Heroku

Built a web page for The House of Ivory, an NFT project. The page includes dynamic data served from a CDN (strapi) hosted on Heroku.
House of Ivory

GeoBot
Discord 👾

May 2021
Python
Discord.py
Flags API

Discord bot that quizzes users on the locations of countries. The bot uses the discord.py library to interact with the Discord API and the Flags API to get the flag images.
GeoBot

PromptSite
AI/Chatgpt 🤖

Feb 2023
React
Next.js
ChatGPT

Next.js application that uses ChatGPT to generate html and css code based on user input. The code is then executed and run to display the requested site. The prompt uses a unique tooling setup that allows chatgpt to call specific commands (such as create file) that are executed by the parsing agent.
PromptSite
new