base on Hey is a decentralized and permissionless social media app built with Lens Protocol šæ # Hey Monorepo
## Requirements
- [Node.js](https://nodejs.org/en/download/) (v18 or higher) - The backbone of our project, make sure you have this installed.
- [pnpm](https://pnpm.io/installation) - Our trusty package manager, because who doesn't love faster installs?
- [Postgres App](https://postgresapp.com/) - Our database of choice, because data needs a cozy home.
- [Redis](https://redis.io/download) - The speedy in-memory data store, for when you need things done in a flash.
## Installation
We harness the power of [pnpm workspaces](https://pnpm.io/workspaces) to keep our monorepo running smoother than a freshly buttered pancake.
### Clone the repository
Clone the Hey monorepo to your local machine:
```bash
git clone
[email protected]:/repos/hey/hey.git
```
### Install NVM (Node Version Manager) and pnpm
Rocking a macOS? You can grab both with Homebrew, like a true brew master:
```bash
brew install nvm pnpm
```
### Install Node.js
Use `nvm` to summon the magical version of Node.js you need:
```bash
nvm install
```
### Install dependencies
Teleport yourself to the root of the repository and let pnpm sprinkle its dependency magic:
```bash
pnpm install
```
### Create a `.env` file
Channel your inner wizard and conjure up a `.env` file from the `.env.example` template for every package and app that needs it. Don't forget to sprinkle in the necessary environment variables!
```bash
cp .env.example .env
```
Don't forget to play copycat and repeat this `.env` file creation for every package and app that needs it. Consistency is key!
### Start the application
When all the stars align and everything is in place, kick off the application in development mode:
```bash
pnpm dev
```
## Build and Test
### Build the application
Ready to build the application? Just run this command:
```bash
pnpm build
```
### Test the application
Want to run tests while you're developing? Here's how you do it:
```bash
pnpm test
```
## Periodic Tasks
### Remove unused exports and helpers
We use `ts-prune` to hunt down and eliminate unused exports and helpers lurking in our codebase. Just a heads-up: you'll need to run this task manually for each package and app. Happy pruning!
```bash
cd apps/web; npx ts-prune -i generated.ts
```
### Update dependencies
Time to give our dependencies a makeover! We rely on the magical powers of `pnpm` to keep everything up-to-date and looking sharp.
```bash
script/clean-branches
script/update-dependencies
```
### Update lock file
We trust `pnpm` to keep our lock file fresh and fabulous!
```bash
script/clean-branches
script/update-lock-file
```
## Other tools you might like
### Ripgrep
We use [Ripgrep](https://github.com/BurntSushi/ripgrep) to search for text in the codebase. It's like `grep` and `ag` had a baby, and that baby grew up to be a speed demon!
Install it via Homebrew:
```bash
brew install ripgrep
```
Search for text in the codebase:
```bash
rg "const Verified"
```
### Bundle Analyzer
In `apps/web`, we've got a bundle analyzer that spills the beans on the size and contents of our production bundles. It's like having X-ray vision for your code!
To generate this output, run:
```bash
cd apps/web
ANALYZE=true pnpm build
```
Fire up this command to build the `apps/web` project and watch as three browser windows magically pop open, each showcasing bundle details for node, edge, and client bundles. The client bundle is the superhero for page performance, while all bundles play a vital role in development and build performance.
## Code of Conduct
We kindly ask all contributors and team members to follow our [Code of Conduct](./CODE_OF_CONDUCT.md). Think of it as our community's golden rulebook - play nice and keep the good vibes flowing!
## License
This project is open-sourced under the **AGPL-3.0** license. For all the nitty-gritty details, check out the [LICENSE](./LICENSE) file. It's a real page-turner!
## P.S
We š you to the moon and back! Your support is like a never-ending supply of coffee for our code. Thank you for making Hey the most awesome place in the universe!
šø
", Assign "at most 3 tags" to the expected json: {"id":"2762","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"