From 390e5e08233277cfe82bce9f6f1ff5185fe1661c Mon Sep 17 00:00:00 2001 From: 1o8ryan <1o8zhouryan@gmail.com> Date: Sun, 25 Oct 2026 11:13:23 -0400 Subject: [PATCH 1/4] Ordered the dashboard different when in mobile view and resized the problem of the day to clear dead space when in mobile view DINO-1049: Formatted view for the dashboard only in mobile fixed it so it should pass SonarQube Cloud removed the normal and used flex hopefully this resolves matine problems fix rabit ai changes oops flipped the order --- js/src/app/dashboard/Dashboard.page.tsx | 57 ++++++++++++++----- .../ProblemOfTheDay/ProblemOfTheDay.tsx | 6 +- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/js/src/app/dashboard/Dashboard.page.tsx b/js/src/app/dashboard/Dashboard.page.tsx index 6b092646d..22a491ded 100644 --- a/js/src/app/dashboard/Dashboard.page.tsx +++ b/js/src/app/dashboard/Dashboard.page.tsx @@ -46,6 +46,7 @@ export default function DashboardPage() { /> ); } + return ( <> @@ -62,19 +63,49 @@ export default function DashboardPage() { : } - - - - - - - - - - + + {smallPhone ? + <> + { + + + + } + { + + + + } + + : <> + { + + + + } + { + + + + } + + } +
+ + + +
diff --git a/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx b/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx index 83b8b6b78..5b640829a 100644 --- a/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx +++ b/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx @@ -8,7 +8,7 @@ export default function ProblemOfTheDay() { const { data, status } = useFetchPotdQuery(); const renderStatusCard = (message: string) => ( - + +
Problem of the day @@ -55,7 +55,7 @@ export default function ProblemOfTheDay() { align={"center"} justify={"center"} w={"100%"} - h={"100%"} + h={{ base: "auto", md: "100%" }} > <Title style={{ textAlign: "center" }} order={4}> {json.title} From 10d8759214b9aec8a356ab2a614e559b3da68135 Mon Sep 17 00:00:00 2001 From: 1o8ryan <1o8zhouryan@gmail.com> Date: Sun, 8 Nov 2026 18:41:54 -0500 Subject: [PATCH 2/4] added a Set<String>, didnt test database yet --- .../leaderboard/LeaderboardController.java | 62 +++++++++++++------ 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java b/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java index 3223a4393..99ad41054 100644 --- a/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java +++ b/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java @@ -10,6 +10,7 @@ import jakarta.servlet.http.HttpServletRequest; import java.util.List; import java.util.Optional; +import java.util.Set; import org.patinanetwork.codebloom.common.components.LeaderboardManager; import org.patinanetwork.codebloom.common.db.models.leaderboard.Leaderboard; import org.patinanetwork.codebloom.common.db.models.user.UserWithScore; @@ -99,6 +100,9 @@ public ResponseEntity<ApiResponder<Page<Indexed<UserWithScoreDto>>>> getLeaderbo @Parameter(description = "Discord name", example = "tahmid") @RequestParam(required = false, defaultValue = "") final String query, + @Parameter(description = "List of enabled filter tags", example = "nyu,hunter,globalIndex") + @RequestParam(required = false) + final Set<String> filters, @Parameter(description = "Filter for Patina users") @RequestParam(required = false, defaultValue = "false") final boolean patina, @Parameter(description = "Filter for Hunter College users") @@ -132,24 +136,46 @@ public ResponseEntity<ApiResponder<Page<Indexed<UserWithScoreDto>>>> getLeaderbo final HttpServletRequest request) { final int parsedPageSize = Math.min(pageSize, MAX_LEADERBOARD_PAGE_SIZE); - - LeaderboardFilterOptions options = LeaderboardFilterOptions.builder() - .page(page) - .pageSize(parsedPageSize) - .query(query) - .patina(patina) - .hunter(hunter) - .nyu(nyu) - .baruch(baruch) - .rpi(rpi) - .gwc(gwc) - .sbu(sbu) - .ccny(ccny) - .columbia(columbia) - .cornell(cornell) - .bmcc(bmcc) - .mhcplusplus(mhcplusplus) - .build(); + + final LeaderboardFilterOptions options; + + if (filters == null || filters.isEmpty()){ + options = LeaderboardFilterOptions.builder() + .page(page) + .pageSize(parsedPageSize) + .query(query) + .patina(patina) + .hunter(hunter) + .nyu(nyu) + .baruch(baruch) + .rpi(rpi) + .gwc(gwc) + .sbu(sbu) + .ccny(ccny) + .columbia(columbia) + .cornell(cornell) + .bmcc(bmcc) + .mhcplusplus(mhcplusplus) + .build(); + }else{ + options = LeaderboardFilterOptions.builder() + .page(page) + .pageSize(parsedPageSize) + .query(query) + .patina(filters.contains("patina")) + .hunter(filters.contains("hunter")) + .nyu(filters.contains("nyu")) + .baruch(filters.contains("baruch")) + .rpi(filters.contains("rpi")) + .gwc(filters.contains("gwc")) + .sbu(filters.contains("sbu")) + .ccny(filters.contains("ccny")) + .columbia(filters.contains("columbia")) + .cornell(filters.contains("cornell")) + .bmcc(filters.contains("bmcc")) + .mhcplusplus(filters.contains("mhcplusplus")) + .build(); + } Page<Indexed<UserWithScoreDto>> createdPage = leaderboardManager.getLeaderboardUsers(leaderboardId, options, globalIndex); From 324172bab14a503bd280d648e6127eb6a2b35cb6 Mon Sep 17 00:00:00 2001 From: 1o8ryan <1o8zhouryan@gmail.com> Date: Sun, 8 Nov 2026 19:00:53 -0500 Subject: [PATCH 3/4] Revert "DINO-1147: update the PR template and current authors (#1056)" This reverts commit 23037e49b47f953ff5c088f8381b5242f3305256. Revert "Ordered the dashboard different when in mobile view and resized the problem of the day to clear dead space when in mobile view" This reverts commit 390e5e08233277cfe82bce9f6f1ff5185fe1661c. fixed coderabbit idk why pull request template was changed, and ran mvrw --- README.md | 13 ++-- js/src/app/dashboard/Dashboard.page.tsx | 57 ++++------------ .../ProblemOfTheDay/ProblemOfTheDay.tsx | 6 +- .../leaderboard/LeaderboardController.java | 65 ++++++++----------- .../LeaderboardControllerTest.java | 64 ++++++++++++++++++ 5 files changed, 114 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index 2c64dbbe0..fd516474d 100644 --- a/README.md +++ b/README.md @@ -85,11 +85,12 @@ Please go to the [local development docs](https://docs.patinanetwork.org/codeblo ## Authors -The current co-leads of the Codebloom development team are Angela Yu and Tahmid Ahmed. Questions go to either of them. +The current lead developer of the Codebloom development team is Arshadul Monir. If you have any inquires or questions, please direct them to him. -- Angela Yu (Co-lead) -- Tahmid Ahmed (Co-lead, founding member) -- Nancy Huang +<!-- TODO: Add new authors --> +<!-- The current members of the core development team are: --> +<!----> +<!-- - Arshadul Monir --> > [!NOTE] > Codebloom is open-source and happily accepts contributions from the community. However, all pull requests are subject to review by the development team. Please click [here](./CONTRIBUTING.md) to learn more. @@ -98,9 +99,11 @@ The current co-leads of the Codebloom development team are Angela Yu and Tahmid Thank you to all the previous members of the Codebloom development team that have helped make Codebloom possible <3 -- Arshadul Monir (Previous lead developer) +- Tahmid Ahmed (Previous lead developer, founding member) - Alfardil Alam (Previous developer, founding member) - Alisha Zaman (Previous developer, founding member) +- Angela Yu (Previous developer) +- Nancy Huang (Previous developer) ## Patina Network diff --git a/js/src/app/dashboard/Dashboard.page.tsx b/js/src/app/dashboard/Dashboard.page.tsx index 22a491ded..6b092646d 100644 --- a/js/src/app/dashboard/Dashboard.page.tsx +++ b/js/src/app/dashboard/Dashboard.page.tsx @@ -46,7 +46,6 @@ export default function DashboardPage() { /> ); } - return ( <> <DocumentTitle title={`CodeBloom - Dashboard`} /> @@ -63,49 +62,19 @@ export default function DashboardPage() { <OnboardingLeetcodeUser /> : <RefreshSubmissions schoolRegistered={schoolRegistered} />} </Center> - <Flex - direction={smallPhone ? "row" : "column"} - wrap={smallPhone ? undefined : "wrap"} - gap={"md"} - align={smallPhone ? "flex-start" : "stretch"} - > - {smallPhone ? - <> - { - <Flex direction={"column"}> - <ProblemOfTheDay /> - </Flex> - } - { - <Flex direction={"column"} flex={1}> - <DashboardLeaderboard - userId={data.user.id} - userTags={data.user.tags} - /> - </Flex> - } - </> - : <> - { - <Flex direction={"column"} flex={1}> - <DashboardLeaderboard - userId={data.user.id} - userTags={data.user.tags} - /> - </Flex> - } - { - <Flex direction={"column"}> - <ProblemOfTheDay /> - </Flex> - } - </> - } - <div> - <Flex direction={"column"} flex={1}> - <RecentSubmissions userId={data.user.id} /> - </Flex> - </div> + <Flex direction={smallPhone ? "row" : "column"} gap={"md"}> + <Flex direction={"column"} flex={1}> + <ProblemOfTheDay /> + </Flex> + <Flex direction={"column"} flex={1}> + <DashboardLeaderboard + userId={data.user.id} + userTags={data.user.tags} + /> + </Flex> + <Flex direction={"column"} flex={1}> + <RecentSubmissions userId={data.user.id} /> + </Flex> </Flex> </Flex> </Box> diff --git a/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx b/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx index 5b640829a..83b8b6b78 100644 --- a/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx +++ b/js/src/app/dashboard/_components/ProblemOfTheDay/ProblemOfTheDay.tsx @@ -8,7 +8,7 @@ export default function ProblemOfTheDay() { const { data, status } = useFetchPotdQuery(); const renderStatusCard = (message: string) => ( - <CodebloomCard miw={"31vw"} mih={{ base: "auto", md: "63vh" }}> + <CodebloomCard miw={"31vw"} mih={"63vh"}> <Flex direction={"row"} justify={"center"} @@ -40,7 +40,7 @@ export default function ProblemOfTheDay() { const json = data.payload; return ( - <CodebloomCard miw={"31vw"} mih={{ base: "auto", md: "63vh" }}> + <CodebloomCard miw={"31vw"} mih={"63vh"}> <Center> <Title style={{ textAlign: "center" }} order={3}> Problem of the day @@ -55,7 +55,7 @@ export default function ProblemOfTheDay() { align={"center"} justify={"center"} w={"100%"} - h={{ base: "auto", md: "100%" }} + h={"100%"} > <Title style={{ textAlign: "center" }} order={4}> {json.title} diff --git a/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java b/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java index 99ad41054..6ccb12c7f 100644 --- a/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java +++ b/src/main/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardController.java @@ -100,7 +100,7 @@ public ResponseEntity<ApiResponder<Page<Indexed<UserWithScoreDto>>>> getLeaderbo @Parameter(description = "Discord name", example = "tahmid") @RequestParam(required = false, defaultValue = "") final String query, - @Parameter(description = "List of enabled filter tags", example = "nyu,hunter,globalIndex") + @Parameter(description = "List of enabled filter tags", example = "nyu,hunter,patina") @RequestParam(required = false) final Set<String> filters, @Parameter(description = "Filter for Patina users") @RequestParam(required = false, defaultValue = "false") @@ -136,46 +136,33 @@ public ResponseEntity<ApiResponder<Page<Indexed<UserWithScoreDto>>>> getLeaderbo final HttpServletRequest request) { final int parsedPageSize = Math.min(pageSize, MAX_LEADERBOARD_PAGE_SIZE); - + final LeaderboardFilterOptions options; - if (filters == null || filters.isEmpty()){ - options = LeaderboardFilterOptions.builder() - .page(page) - .pageSize(parsedPageSize) - .query(query) - .patina(patina) - .hunter(hunter) - .nyu(nyu) - .baruch(baruch) - .rpi(rpi) - .gwc(gwc) - .sbu(sbu) - .ccny(ccny) - .columbia(columbia) - .cornell(cornell) - .bmcc(bmcc) - .mhcplusplus(mhcplusplus) - .build(); - }else{ - options = LeaderboardFilterOptions.builder() - .page(page) - .pageSize(parsedPageSize) - .query(query) - .patina(filters.contains("patina")) - .hunter(filters.contains("hunter")) - .nyu(filters.contains("nyu")) - .baruch(filters.contains("baruch")) - .rpi(filters.contains("rpi")) - .gwc(filters.contains("gwc")) - .sbu(filters.contains("sbu")) - .ccny(filters.contains("ccny")) - .columbia(filters.contains("columbia")) - .cornell(filters.contains("cornell")) - .bmcc(filters.contains("bmcc")) - .mhcplusplus(filters.contains("mhcplusplus")) - .build(); - } + final Set<String> normalizedFilters = filters == null + ? Set.of() + : filters.stream() + .filter(java.util.Objects::nonNull) + .map(s -> s.trim().toLowerCase()) + .collect(java.util.stream.Collectors.toSet()); + + options = LeaderboardFilterOptions.builder() + .page(page) + .pageSize(parsedPageSize) + .query(query) + .patina(patina || normalizedFilters.contains("patina")) + .hunter(hunter || normalizedFilters.contains("hunter")) + .nyu(nyu || normalizedFilters.contains("nyu")) + .baruch(baruch || normalizedFilters.contains("baruch")) + .rpi(rpi || normalizedFilters.contains("rpi")) + .gwc(gwc || normalizedFilters.contains("gwc")) + .sbu(sbu || normalizedFilters.contains("sbu")) + .ccny(ccny || normalizedFilters.contains("ccny")) + .columbia(columbia || normalizedFilters.contains("columbia")) + .cornell(cornell || normalizedFilters.contains("cornell")) + .bmcc(bmcc || normalizedFilters.contains("bmcc")) + .mhcplusplus(mhcplusplus || normalizedFilters.contains("mhcplusplus")) + .build(); Page<Indexed<UserWithScoreDto>> createdPage = leaderboardManager.getLeaderboardUsers(leaderboardId, options, globalIndex); diff --git a/src/test/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardControllerTest.java b/src/test/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardControllerTest.java index 678f4a0ed..c6a66f442 100644 --- a/src/test/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardControllerTest.java +++ b/src/test/java/org/patinanetwork/codebloom/api/leaderboard/LeaderboardControllerTest.java @@ -1,11 +1,15 @@ package org.patinanetwork.codebloom.api.leaderboard; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -57,6 +61,7 @@ void testGetLeaderboardUsersByIdMhcPlusPlus() { PAGE, PAGE_SIZE, "", + null, false, false, false, @@ -138,6 +143,7 @@ void capsPageSize() { 1, 999, "", + null, false, false, false, @@ -167,6 +173,7 @@ void passesAllFilters() { 2, 10, "tahmid", + null, true /* patina */, true /* hunter */, true /* nyu */, @@ -203,6 +210,63 @@ void passesAllFilters() { assertTrue(opts.isMhcplusplus()); } + @Test + @DisplayName("passes all filter flags through a filter tag") + void passesAllFiltersThroughFilterTag() { + leaderboardController.getLeaderboardUsersById( + LEADERBOARD_ID, + 2, + 10, + "tahmid", + Set.of( + "patina", + "hunter", + "nyu", + "baruch", + "rpi", + "gwc", + "sbu", + "ccny", + "columbia", + "cornell", + "bmcc", + "mhcplusplus"), + false /* patina */, + false /* hunter */, + false /* nyu */, + false /* baruch */, + false /* rpi */, + false /* gwc */, + false /* sbu */, + false /* ccny */, + false /* columbia */, + false /* cornell */, + false /* bmcc */, + false /* mhc++ */, + true /* globalIndex */, + null); + + ArgumentCaptor<LeaderboardFilterOptions> captor = ArgumentCaptor.forClass(LeaderboardFilterOptions.class); + verify(leaderboardManager).getLeaderboardUsers(eq(LEADERBOARD_ID), captor.capture(), eq(true)); + + var opts = captor.getValue(); + assertEquals(2, opts.getPage()); + assertEquals(10, opts.getPageSize()); + assertEquals("tahmid", opts.getQuery()); + assertTrue(opts.isPatina()); + assertTrue(opts.isHunter()); + assertTrue(opts.isNyu()); + assertTrue(opts.isBaruch()); + assertTrue(opts.isRpi()); + assertTrue(opts.isGwc()); + assertTrue(opts.isSbu()); + assertTrue(opts.isCcny()); + assertTrue(opts.isColumbia()); + assertTrue(opts.isCornell()); + assertTrue(opts.isBmcc()); + assertTrue(opts.isMhcplusplus()); + } + @Test @DisplayName("returns metadata for the most recent leaderboard") void returnsCurrentMetadata() { From 2dc29c732c6c58238e2c422dfdb0a3ec9aa313f5 Mon Sep 17 00:00:00 2001 From: 1o8ryan <1o8zhouryan@gmail.com> Date: Sun, 8 Nov 2026 19:48:09 -0500 Subject: [PATCH 4/4] idk why this keeps changing --- README.md | 55 ++++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index fd516474d..3293e3cf0 100644 --- a/README.md +++ b/README.md @@ -49,35 +49,35 @@ _Last updated: 02/14/2026_ This repository is a monorepo that contains many different pieces of Codebloom, which include: - Our public task board on [Notion](https://www.notion.so/) which is used to define a relationship between tasks and PRs - - [View public taskboard](https://codebloom.notion.site/) - - [Goto `.github/scripts/notion/index.ts` to view custom PR/commit check validation implementation](./.github/scripts/notion/index.ts) + - [View public taskboard](https://codebloom.notion.site/) + - [Goto `.github/scripts/notion/index.ts` to view custom PR/commit check validation implementation](./.github/scripts/notion/index.ts) - Our backend which is written in [Java 25](https://dev.java/) and [Spring Boot 3](https://spring.io/projects/spring-boot). The backend interfaces with our database via [pgJDBC](https://jdbc.postgresql.org/), Discord via [JDA](https://jda.wiki/), [leetcode.com](https://leetcode.com) via a custom abstraction over their [GraphQL](https://graphql.org/) API as well as [Playwright](https://playwright.dev/java/) to obtain credentials to [leetcode.com](https://leetcode.com) via [GitHub OAuth](https://github.com). - - [Goto `src/`](./src/) - - [View detailed documentation](./src/README.md) - - [View OpenAPI schema](https://codebloom.patinanetwork.org/swagger-ui/index.html) + - [Goto `src/`](./src/) + - [View detailed documentation](./src/README.md) + - [View OpenAPI schema](https://codebloom.patinanetwork.org/swagger-ui/index.html) - Our main database is [PostgreSQL 16](https://www.postgresql.org/), which is controlled with [Flyway](https://www.red-gate.com/products/flyway/community/) migrations. - - [Goto `db/`](./db/) - - [View detailed documentation](./db/README.md) + - [Goto `db/`](./db/) + - [View detailed documentation](./db/README.md) - Our frontend which is written in [TypeScript](https://www.typescriptlang.org/) and [React 18](https://www.typescriptlang.org/) + [Vite](https://vite.dev/). - - [Goto `js/`](./js/) - - [View detailed documentation](./js/README.md) + - [Goto `js/`](./js/) + - [View detailed documentation](./js/README.md) - Our email templater which utilizes [React Email](https://react.email/) and is dynamically parsed & templated at runtime with [JSoup](https://jsoup.org/) in our backend. - - [Goto `email/`](./email/) - - [View detailed documentation](./email/README.md) + - [Goto `email/`](./email/) + - [View detailed documentation](./email/README.md) - Our CI/CD pipeline which utilizes [GitHub Actions](https://github.com/features/actions) with [TypeScript](https://typescriptlang.org/) + [Bun Shell](https://bun.com/docs/runtime/shell). - - [Goto `.github/`](./.github/) - - [Goto `.github/scripts/` to view all Bun Shell scripts](./.github/scripts/) - - [View detailed documentation](./.github/READMEFIRST.md) + - [Goto `.github/`](./.github/) + - [Goto `.github/scripts/` to view all Bun Shell scripts](./.github/scripts/) + - [View detailed documentation](./.github/READMEFIRST.md) - Our service gets deployed to two environments (production & staging) to our Kubernetes cluster (doc update WIP). We containerize the main application with [Docker](https://www.docker.com/) and monitor metrics & logs with [Prometheus](https://prometheus.io/) & [OpenSearch](https://opensearch.org/) which get fed to [Grafana](https://grafana.com/). - - [Goto `.github/scripts/redeploy/` to view Bun Shell redeploy scripts](./.github/scripts/redeploy/) - - [Goto `infra/`](./infra/) - - [View detailed documentation](./infra/README.md) - - [View observability documentation](https://docs.patinanetwork.org/codebloom/observability/) + - [Goto `.github/scripts/redeploy/` to view Bun Shell redeploy scripts](./.github/scripts/redeploy/) + - [Goto `infra/`](./infra/) + - [View detailed documentation](./infra/README.md) + - [View observability documentation](https://docs.patinanetwork.org/codebloom/observability/) - Our internal tools (e.g. custom Ink CLI scripts & our internal standup bot) are currently being written in [Rust](https://rust-lang.org/) and [TypeScript](https://typescriptlang.org) - - [Goto `internal/`](./internal/) - - [View detailed documentation](./internal/README.md) + - [Goto `internal/`](./internal/) + - [View detailed documentation](./internal/README.md) - Environment secrets live in local env files generated from Azure. - - [View detailed documentation](https://docs.patinanetwork.org/codebloom/local/SECRET/) + - [View detailed documentation](https://docs.patinanetwork.org/codebloom/local/SECRET/) ## Setup @@ -85,12 +85,11 @@ Please go to the [local development docs](https://docs.patinanetwork.org/codeblo ## Authors -The current lead developer of the Codebloom development team is Arshadul Monir. If you have any inquires or questions, please direct them to him. +The current co-leads of the Codebloom development team are Angela Yu and Tahmid Ahmed. Questions go to either of them. -<!-- TODO: Add new authors --> -<!-- The current members of the core development team are: --> -<!----> -<!-- - Arshadul Monir --> +- Angela Yu (Co-lead) +- Tahmid Ahmed (Co-lead, founding member) +- Nancy Huang > [!NOTE] > Codebloom is open-source and happily accepts contributions from the community. However, all pull requests are subject to review by the development team. Please click [here](./CONTRIBUTING.md) to learn more. @@ -99,11 +98,9 @@ The current lead developer of the Codebloom development team is Arshadul Monir. Thank you to all the previous members of the Codebloom development team that have helped make Codebloom possible <3 -- Tahmid Ahmed (Previous lead developer, founding member) +- Arshadul Monir (Previous lead developer) - Alfardil Alam (Previous developer, founding member) - Alisha Zaman (Previous developer, founding member) -- Angela Yu (Previous developer) -- Nancy Huang (Previous developer) ## Patina Network