diff --git a/apps/builddao/widget/Compose.jsx b/apps/builddao/widget/Compose.jsx
index 6cf5406d..55c1d004 100644
--- a/apps/builddao/widget/Compose.jsx
+++ b/apps/builddao/widget/Compose.jsx
@@ -1,5 +1,5 @@
-const { Avatar, Button } = VM.require("buildhub.near/widget/components") || {
- Avatar: () => <>>,
+const { User, Button } = VM.require("buildhub.near/widget/components") || {
+ User: () => <>>,
Button: () => <>>,
};
@@ -171,6 +171,7 @@ const PostCreator = styled.div`
padding: 1rem;
background: var(--compose-bg, #23242b);
+ border: 1px solid var(--stroke-color, rgba(255, 255, 255, 0.2));
border-radius: 12px;
margin-bottom: 1rem;
@@ -373,14 +374,7 @@ const MarkdownPreview = styled.div`
`;
const avatarComponent = useMemo(() => {
- return (
-
- );
+ return ;
}, [context.accountId]);
return (
diff --git a/apps/builddao/widget/Profile.jsx b/apps/builddao/widget/Profile.jsx
new file mode 100644
index 00000000..a19ab7a5
--- /dev/null
+++ b/apps/builddao/widget/Profile.jsx
@@ -0,0 +1,48 @@
+if (!context.accountId || !props.accountId) {
+ return "No Account ID";
+}
+
+const accountId = props.accountId || context.accountId;
+
+const profile = Social.getr(`${accountId}/profile`);
+if (!profile) {
+ return "";
+}
+
+const ProfileContainer = styled.div`
+ display: grid;
+ grid-template-columns: repeat(6, minmax(0, 1fr));
+ gap: 1rem;
+`;
+
+const SideContainer = styled.div`
+ grid-column: span 2 / span 1;
+`;
+
+const MainContainer = styled.div`
+ grid-column: span 4 / span 4;
+`;
+
+return (
+
+
+
+
+
+
+
+
+);
diff --git a/apps/builddao/widget/app.jsx b/apps/builddao/widget/app.jsx
index 6cf10cae..73c835b0 100644
--- a/apps/builddao/widget/app.jsx
+++ b/apps/builddao/widget/app.jsx
@@ -25,8 +25,8 @@ const Root = styled.div`
--compose-bg: #23242b;
- --post-bg: #0b0c14;
- --post-bg-hover: #17181c;
+ --post-bg: #23242b;
+ --post-bg-hover: #1d1f25;
--post-bg-transparent: rgba(23, 24, 28, 0);
--button-primary-bg: #ffaf51;
diff --git a/apps/builddao/widget/components/Button.jsx b/apps/builddao/widget/components/Button.jsx
index f20a4e0b..a4f07955 100644
--- a/apps/builddao/widget/components/Button.jsx
+++ b/apps/builddao/widget/components/Button.jsx
@@ -6,7 +6,10 @@ const StyledButton = styled.button`
align-items: center;
gap: 4px;
border-radius: 8px;
- font: 500 14px / normal;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: normal;
+
transition: all 300ms;
${(props) =>
diff --git a/apps/builddao/widget/components/profile/FollowStats.jsx b/apps/builddao/widget/components/profile/FollowStats.jsx
new file mode 100644
index 00000000..aa4508b2
--- /dev/null
+++ b/apps/builddao/widget/components/profile/FollowStats.jsx
@@ -0,0 +1,59 @@
+const accountId = props.accountId;
+
+if (!accountId) {
+ return "";
+}
+
+const following = Social.keys(`${accountId}/graph/follow/*`, "final", {
+ return_type: "BlockHeight",
+ values_only: true,
+});
+
+const followers = Social.keys(`*/graph/follow/${accountId}`, "final", {
+ return_type: "BlockHeight",
+ values_only: true,
+});
+
+const numFollowing = following
+ ? Object.keys(following[accountId].graph.follow || {}).length
+ : null;
+const numFollowers = followers ? Object.keys(followers || {}).length : null;
+
+return (
+
+
+
+
+ {numFollowing !== null ? (
+
+ {numFollowing}
+
+ ) : (
+ "?"
+ )}{" "}
+ Following
+
+
+
+
+ {numFollowers !== null ? (
+
+ {numFollowers}
+
+ ) : (
+ "?"
+ )}{" "}
+
+ Follower{numFollowers !== 1 && "s"}
+
+
+
+
+
+);
diff --git a/apps/builddao/widget/components/profile/ProfileInfo.jsx b/apps/builddao/widget/components/profile/ProfileInfo.jsx
new file mode 100644
index 00000000..26d4b69b
--- /dev/null
+++ b/apps/builddao/widget/components/profile/ProfileInfo.jsx
@@ -0,0 +1,348 @@
+const { Button } =
+ VM.require("buildhub.near/widget/components") || (() => <>>);
+
+if (!context.accountId || !props.accountId) {
+ return "No Account ID";
+}
+
+const accountId = props.accountId || context.accountId;
+
+const profile = Social.getr(`${accountId}/profile`);
+if (!profile) {
+ return "";
+}
+
+const CopyIcon = () => (
+
+);
+
+const Container = styled.div`
+ padding: 24px 16px;
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+
+ .profile-image-section {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ img {
+ width: 4rem !important;
+ height: 4rem !important;
+ border-radius: 100%;
+ image-rendering: pixelated;
+ object-fit: cover;
+ }
+ }
+
+ .account-info-section {
+ h3 {
+ color: var(--White-100, #fff);
+ /* H3/Large */
+ font-size: 24px;
+ font-style: normal;
+ font-weight: 500;
+ line-height: 140%; /* 33.6px */
+ margin: 0;
+ }
+
+ span {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ max-width: max-content;
+
+ color: var(--White-50, #b0b0b0);
+
+ /* Body/14px */
+ font-size: 14px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 170%; /* 23.8px */
+ margin: 0;
+
+ cursor: pointer;
+ }
+ }
+
+ .bio-section {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+
+ h3 {
+ color: var(--White-100, #fff);
+ /* Body/10px */
+ font-size: 10px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: normal;
+ margin: 0;
+ }
+
+ p {
+ color: var(--White-50, #b0b0b0);
+
+ /* Body/14px */
+ font-size: 14px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 170%; /* 23.8px */
+ margin: 0;
+ }
+ }
+
+ .link-section {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+
+ h3 {
+ color: var(--White-100, #fff);
+ /* Body/10px */
+ font-size: 10px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: normal;
+ margin: 0;
+ }
+ }
+ .badge-section {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+
+ h3 {
+ color: var(--White-100, #fff);
+ /* Body/10px */
+ font-size: 10px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: normal;
+ margin: 0;
+ }
+ }
+
+ .location-section {
+ span {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ color: var(--White-50, #b0b0b0);
+
+ /* Body/14px */
+ font-size: 14px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 170%; /* 23.8px */
+ }
+ }
+`;
+
+const TwitterIcon = () => (
+
+);
+
+const MapIcon = () => (
+
+);
+
+const LinkTree = ({ profile }) => {
+ const { twitter, github, telegram, website } = profile.linktree;
+
+ if (!twitter || !github || !telegram || !website) {
+ return null;
+ }
+
+ return (
+ <>
+ LINKS
+
+ >
+ );
+};
+
+const StyledHashtag = styled.span`
+ display: flex;
+ padding: 4px 8px;
+ justify-content: center;
+ align-items: center;
+ align-content: center;
+ gap: 4px;
+ flex-wrap: wrap;
+
+ border-radius: 2px;
+ border: 1px solid var(--Yellow, #ffaf51);
+
+ color: var(--White-100, #fff);
+
+ /* Body/10px */
+ font-size: 12px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: normal;
+
+ .tag {
+ color: var(--Yellow, #ffaf51);
+ }
+`;
+const Hashtag = ({ children }) => {
+ return (
+
+ # {children}
+
+ );
+};
+
+const Badges = ({ tags }) => {
+ if (!tags) {
+ return null;
+ }
+
+ tags = Object.keys(tags);
+
+ return (
+ <>
+ BADGE
+
+ {tags.map((it) => (
+ {it}
+ ))}
+
+ >
+ );
+};
+
+return (
+
+
+
+ {context.accountId === accountId && (
+
+ )}
+
+
+
{profile.name}
+ clipboard.writeText(accountId)}>
+ {accountId}
+
+
+
+
+
+
+
+
+ {profile.description && (
+
+
BIO
+
+
+ )}
+ {profile.location && (
+
+
+ {profile.location}
+
+
+ )}
+ {profile.linktree && (
+
+
+
+ )}
+
+);
diff --git a/apps/builddao/widget/template/SidebarLayout.jsx b/apps/builddao/widget/template/SidebarLayout.jsx
index 9b57130a..0cfec2fe 100644
--- a/apps/builddao/widget/template/SidebarLayout.jsx
+++ b/apps/builddao/widget/template/SidebarLayout.jsx
@@ -28,6 +28,7 @@ const SidebarContainer = styled.div`
border: 0px;
flex-direction: row;
overflow-x: auto;
+ min-height: auto;
}
`;
@@ -57,7 +58,7 @@ const Sidebar = ({ currentPath, page, routes }) => (
textDecoration: "none",
cursor: "pointer",
padding: "8px 12px",
- gap: "10px"
+ gap: "10px",
}}
>
{route.init.icon && }