From 2d260ac894e4d7c3a7aaf82a7dbe59070e50986c Mon Sep 17 00:00:00 2001 From: Prad N Date: Mon, 14 Jul 2025 11:34:01 +0800 Subject: [PATCH] feat: revamp 'Uses' page with blockchain and dev tools --- .gitignore | 1 + CLAUDE.md | 98 ++++++++++++ src/app/about/page.tsx | 51 ++++--- .../page.mdx | 90 +++++++++++ .../page.mdx | 91 ----------- .../planetaria-design-system.png | Bin 52474 -> 0 bytes .../future-of-digital-identity/page.mdx | 131 ++++++++++++++++ .../articles/introducing-animaginary/page.mdx | 106 ------------- .../page.mdx | 101 ------------- .../why-blockchain-needs-better-ux/page.mdx | 97 ++++++++++++ src/app/layout.tsx | 4 +- src/app/page.tsx | 41 ++--- src/app/projects/page.tsx | 30 ++-- src/app/speaking/page.tsx | 49 +++--- src/app/uses/page.tsx | 142 +++++++++++------- 15 files changed, 595 insertions(+), 437 deletions(-) create mode 100644 CLAUDE.md create mode 100644 src/app/articles/building-sonr-decentralized-identity/page.mdx delete mode 100644 src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/page.mdx delete mode 100644 src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/planetaria-design-system.png create mode 100644 src/app/articles/future-of-digital-identity/page.mdx delete mode 100644 src/app/articles/introducing-animaginary/page.mdx delete mode 100644 src/app/articles/rewriting-the-cosmos-kernel-in-rust/page.mdx create mode 100644 src/app/articles/why-blockchain-needs-better-ux/page.mdx diff --git a/.gitignore b/.gitignore index 495eb8b..a128d25 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ data node_modules .pnp .pnp.js +tmp/ # testing coverage diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..e42587b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,98 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is a personal portfolio/blog website built with Next.js 13.4.16 (App Router), TypeScript, and Tailwind CSS. It's based on the Tailwind UI "Spotlight" template and features a modern, responsive design with dark mode support. + +## Essential Commands + +```bash +# Install dependencies +npm install + +# Run development server (http://localhost:3000) +npm run dev + +# Build for production +npm run build + +# Start production server +npm start + +# Run linting +npm run lint + +# Type checking (via build process) +npm run build +``` + +## Architecture & Key Patterns + +### Directory Structure +- **`/src/app/`** - Next.js App Router pages and layouts + - Each page is in its own directory with `page.tsx` or `page.mdx` + - Articles are MDX files in subdirectories under `/articles/` + - RSS feed generation at `/feed.xml/` + +- **`/src/components/`** - Reusable React components + - Layout components extend from `Layout.tsx` + - All components use TypeScript with proper type definitions + - Components use Tailwind CSS classes for styling + +- **`/src/lib/`** - Utility functions + - `articles.ts` - Functions for loading and managing MDX articles + - `formatDate.ts` - Date formatting utilities + +### Content Management +- Articles are written in MDX format in `/src/app/articles/[slug]/page.mdx` +- Each article directory can contain images alongside the MDX file +- Article metadata is defined in the MDX frontmatter +- The `ArticleLayout` component wraps all article content + +### Styling Approach +- Tailwind CSS utility classes for all styling +- Dark mode support via `next-themes` package +- Typography plugin for prose content styling +- Custom Tailwind configuration in `tailwind.config.js` +- Code syntax highlighting with Prism CSS + +### TypeScript Configuration +- Strict mode enabled +- Path alias `@/*` maps to `./src/*` +- All components and utilities should have proper TypeScript types + +### Important Files +- `next.config.mjs` - Next.js configuration with MDX support +- `tailwind.config.js` - Tailwind CSS customization +- `.env.local` - Must set `NEXT_PUBLIC_SITE_URL` for production + +## Development Guidelines + +### Adding New Pages +1. Create a new directory under `/src/app/` +2. Add a `page.tsx` file with proper TypeScript types +3. Use the `SimpleLayout` or custom layout components +4. Follow existing page patterns for consistency + +### Adding New Articles +1. Create a new directory under `/src/app/articles/[article-name]/` +2. Add a `page.mdx` file with frontmatter including title, description, author, and date +3. Place any images in the same directory +4. Articles automatically appear in the articles list and RSS feed + +### Component Development +- Always use TypeScript with proper type definitions +- Follow existing component patterns for props and structure +- Use Tailwind CSS classes; avoid inline styles +- Components should be reusable and properly abstracted + +### Environment Setup +Before running the project, create a `.env.local` file: +``` +NEXT_PUBLIC_SITE_URL=https://your-domain.com +``` + +## No Testing Framework +This project does not currently have a testing framework configured. Consider adding Jest and React Testing Library if test coverage is needed. \ No newline at end of file diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index c5016d6..5554382 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -51,7 +51,7 @@ function MailIcon(props: React.ComponentPropsWithoutRef<'svg'>) { export const metadata: Metadata = { title: 'About', description: - 'I’m Prad Nukala. I live in New York City, where I design the future.', + 'I'm Prad Nukala, founder of Sonr and blockchain identity pioneer. Building the future of decentralized identity in New York City.', } export default function About() { @@ -70,56 +70,57 @@ export default function About() {

- I’m Prad Nukala. I live in NYC, where im building a better Internet. + I'm Prad Nukala. I live in New York City, where I'm building the future of digital identity.

- I’ve loved making things for as long as I can remember, and wrote - my first program when I was 10 years old, just two weeks after my - dad brought home the brand new iMac that I taught - myself Objective-C on. + I've been passionate about technology since the introduction of the App Store, where I made one + of the first 5,000 apps at age 12. This early start in mobile development shaped my understanding + of how technology can empower individuals and sparked my lifelong commitment to building tools that + put users first.

- The only thing I loved more than computers as a kid was space. - When I was 8, I climbed the 40-foot oak tree at the back of our - yard while wearing my older sister’s motorcycle helmet, counted - down from three, and jumped — hoping the tree was tall enough that - with just a bit of momentum I’d be able to get to orbit. + My journey in blockchain began with a simple realization: the internet's identity layer is fundamentally + broken. Users have no control over their digital selves, leading to privacy breaches, data exploitation, + and a web that serves corporations over people. This inspired me to found Sonr in 2020, where we're + building an IBC-enabled blockchain specifically designed for decentralized identity.

- I spent the next few summers indoors working on a rocket design, - while I recovered from the multiple surgeries it took to fix my - badly broken legs. It took nine iterations, but when I was 15 I - sent my dad’s Blackberry into orbit and was able to transmit a - photo back down to our family computer from space. + As a W3C Working Group Member for DIDs, WebAuthn, and WASM, I'm actively shaping the standards that + will define the future of digital identity. My technical contributions speak to my commitment - with over + 6,000 GitHub contributions from 2021-2023, I was ranked as the 4th most active contributor worldwide. + Before Sonr, I self-developed over 10 projects that garnered more than 1 million downloads combined.

- Today, I’m the founder of Sonr, where we’re working on - reinventing the way we connect with each other online. We focus on the basics - — like privacy, security, and UX, in order to maximize everyones protection on the web. + Today, I lead Sonr with a clear mission: to create a peer-to-peer identity and asset management system + that leverages DID documents, WebAuthn, and IPFS. We've raised $4.7M in funding and onboarded over 120 + first-time blockchain developers to our platform. Our technology features passkey-based user accounts, + DKLS-MPC powered wallets (no seed phrases), and lightning-fast 600ms wallet generation. I believe the + future of the internet is one where users own their identity, control their data, and interact on their + own terms.

diff --git a/src/app/articles/building-sonr-decentralized-identity/page.mdx b/src/app/articles/building-sonr-decentralized-identity/page.mdx new file mode 100644 index 0000000..d8541f3 --- /dev/null +++ b/src/app/articles/building-sonr-decentralized-identity/page.mdx @@ -0,0 +1,90 @@ +import { ArticleLayout } from '@/components/ArticleLayout' + +export const article = { + author: 'Prad Nukala', + date: '2024-01-15', + title: 'Building Sonr: The Journey to Decentralized Identity', + description: + 'How we're creating an IBC-enabled blockchain that puts users in control of their digital identity, eliminating passwords and seed phrases while maintaining true self-sovereignty.', +} + +export const metadata = { + title: article.title, + description: article.description, +} + +export default (props) => + +When I founded Sonr in 2020, I had a simple but ambitious vision: create a world where people truly own their digital identity. After years of watching data breaches, privacy violations, and the centralization of user data, I knew there had to be a better way. + +## The Problem with Digital Identity Today + +The internet wasn't designed with identity in mind. We've patched together solutions using usernames, passwords, and centralized databases, but these approaches are fundamentally broken: + +- **No User Control**: Your identity lives on servers you don't control +- **Privacy Violations**: Companies monetize your personal data without consent +- **Security Nightmares**: Password breaches affect billions of users annually +- **Platform Lock-in**: Your identity is fragmented across countless services + +## Enter Sonr: A New Paradigm + +Sonr is an IBC-enabled blockchain specifically designed for decentralized identity. We're not just building another blockchain - we're creating the identity layer the internet should have had from the beginning. + +### Key Innovations + +1. **Passkey-Based Authentication**: No more passwords. Users authenticate with biometrics or device-based keys, making phishing virtually impossible. + +2. **No Seed Phrases**: Using DKLS-MPC (Distributed Key Lifetime Security - Multi-Party Computation), we've eliminated the need for users to manage complex seed phrases while maintaining true ownership. + +3. **Lightning-Fast Performance**: 600ms wallet generation means users can onboard as quickly as traditional web apps. + +4. **IBC Integration**: As part of the Cosmos ecosystem, Sonr identities work seamlessly across multiple blockchains. + +## Technical Architecture + +At its core, Sonr leverages several cutting-edge technologies: + +```typescript +// Example: Creating a Sonr identity +const identity = await Sonr.createIdentity({ + authentication: 'passkey', + storage: 'ipfs', + recovery: 'social' +}); + +// The user now has a DID (Decentralized Identifier) +console.log(identity.did); // did:sonr:abc123... +``` + +### DID Documents +Every Sonr user has a DID document stored on-chain that contains their public keys and service endpoints. This document is the source of truth for their identity. + +### IPFS Integration +User data is stored on IPFS, ensuring it's distributed, permanent, and under user control. Only the user's keys can decrypt their personal information. + +### UCAN Tokens +We use User Controlled Authorization Networks (UCAN) for fine-grained access control. Users can delegate specific permissions without sharing their private keys. + +## Real-World Impact + +Since launching, we've: +- Raised $4.7M in funding to accelerate development +- Onboarded over 120 first-time blockchain developers +- Created tools that make blockchain accessible to mainstream developers +- Built partnerships across the Cosmos ecosystem + +## The Road Ahead + +We're currently preparing for our public testnet launch, with mainnet coming soon. Our goal is to onboard the next billion users to Web3 - not by forcing them to understand blockchain, but by making it invisible. + +The future of the internet is one where: +- Users own their identity and data +- Privacy is default, not optional +- Security doesn't sacrifice usability +- Interoperability is built-in, not bolted-on + +## Join the Revolution + +If you're a developer interested in building on Sonr, check out our [documentation](https://docs.sonr.io) and [GitHub](https://github.com/sonr-io). We're always looking for contributors who share our vision of a more equitable internet. + +The identity layer of the internet is broken, but together, we can fix it. Welcome to Sonr - where your identity truly belongs to you. \ No newline at end of file diff --git a/src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/page.mdx b/src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/page.mdx deleted file mode 100644 index 7da2949..0000000 --- a/src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/page.mdx +++ /dev/null @@ -1,91 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' -import Image from 'next/image' -import designSystem from './planetaria-design-system.png' - -export const article = { - author: 'Adam Wathan', - date: '2023-09-05', - title: 'Crafting an Identity system for a Multiplanetary future', - description: - 'Most companies try to stay ahead of the curve when it comes to visual design, but for Sonr we needed to create a brand that would still inspire us 100 years from now when humanity has spread across our entire solar system.', -} - -export const metadata = { - title: article.title, - description: article.description, -} - -export default (props) => - -Most companies try to stay ahead of the curve when it comes to visual design, but for Sonr we needed to create a brand that would still inspire us 100 years from now when humanity has spread across our entire solar system. - - - -I knew that to get it right I was going to have to replicate the viewing conditions of someone from the future, so I grabbed my space helmet from the closet, created a new Figma document, and got to work. - -## Sermone fata - -Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior -in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite -variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda -torquere temptata, erit maneat et ramos, [iam](#) ait dominari -potitus! Tibi litora matremque fumantia condi radicibus opusque. - -Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur -levitate quas ubi arcum ripas oculos abest. Adest [commissaque -victae](#) in gemitus nectareis ire diva -dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita -nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu -nil utinam paternos ima, commentaque. - -```c -exbibyte_wins = gigahertz(3); -grayscaleUtilityClient = control_uat; -pcmciaHibernate = oop_virus_console(text_mountain); -if (stateWaisFirewire >= -2) { - jfs = 647065 / ldapVrml(tutorialRestore, 85); - metal_runtime_parse = roomComputingResolution - toolbarUpload + - ipx_nvram_open; -} else { - maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node + - only_qbe_media, minicomputer); -} -``` - -Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc -oscula nomina pignora corpus deserat. - -## Lethaei Pindumve me quae dinumerat Pavor - -Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec -divite: et ille illa furit sim verbis Cyllenius. - -1. Captus inpleverunt collo -2. Nec nam placebant -3. Siquos vulgus -4. Dictis carissime fugae -5. A tacitos nulla viginti - -Ungues fistula annoso, ille addit linoque motatque uberior verso -[rubuerunt](#) confine desuetaque. _Sanguine_ anteit -emerguntque expugnacior est pennas iniqui ecce **haeret** genus: peiora imagine -fossas Cephisos formosa! Refugitque amata [refelli](#) -supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum -regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota -ars talis. - -```c -digital.webcam_dual_frequency = webmasterMms; -if (5 + language_standalone_google) { - cc_inbox_layout *= file_character; - task += p; - lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual, - adf); -} -windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314), - dongleBashThumbnail), interpreter); -``` - -Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam -proelia: illo patrio _esse summus_, enim sua serpentibus, Hyleusque. Est coniuge -recuso; refert Coroniden ignotos manat, adfectu. diff --git a/src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/planetaria-design-system.png b/src/app/articles/crafting-a-design-system-for-a-multiplanetary-future/planetaria-design-system.png deleted file mode 100644 index 0d240176ec56f57ecb4881d265daad31e6012d47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52474 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ϖTmrpapjZNm~!Bl_vyaMt}qieRWO6vhSHjZV|90M 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 diff --git a/src/app/articles/future-of-digital-identity/page.mdx b/src/app/articles/future-of-digital-identity/page.mdx new file mode 100644 index 0000000..64d2560 --- /dev/null +++ b/src/app/articles/future-of-digital-identity/page.mdx @@ -0,0 +1,131 @@ +import { ArticleLayout } from '@/components/ArticleLayout' + +export const article = { + author: 'Prad Nukala', + date: '2023-09-10', + title: 'The Future of Digital Identity: Self-Sovereign and Interoperable', + description: + 'Digital identity is broken. Here's how decentralized identifiers (DIDs), verifiable credentials, and blockchain technology will create a future where you truly own your identity.', +} + +export const metadata = { + title: article.title, + description: article.description, +} + +export default (props) => + +Every day, billions of people prove who they are online using systems designed in the 1960s. Usernames and passwords were meant to be temporary solutions, yet here we are, six decades later, still typing "password123" and hoping for the best. + +As someone who's been building technology since creating one of the first App Store apps, and now as a W3C Working Group Member for DIDs and WebAuthn, I've seen firsthand how broken our identity systems are. It's time for a fundamental shift. + +## The Current Identity Crisis + +Today's digital identity landscape is a disaster: + +- **2.5 billion** records were exposed in data breaches last year +- The average person has **100+ passwords** to manage +- Identity theft affects **1 in 15 people** annually +- Users have **zero control** over their personal data + +But the real problem isn't just security - it's ownership. Your digital identity doesn't belong to you. It belongs to Facebook, Google, your bank, your employer, and dozens of other entities. + +## Enter Self-Sovereign Identity + +Self-sovereign identity (SSI) flips the script. Instead of companies owning your identity, you do. Here's how it works: + +### Decentralized Identifiers (DIDs) +A DID is like a phone number for your identity - unique, permanent, and owned by you. Unlike usernames, DIDs aren't controlled by any company. + +``` +did:sonr:1234567890abcdef +``` + +This simple string represents your entire digital identity, secured by cryptography rather than corporate databases. + +### Verifiable Credentials +Imagine your driver's license, but digital and cryptographically verifiable. That's a verifiable credential. Your university can issue you a degree credential, your employer can issue an employment credential, and you store them in your digital wallet. + +The magic? You can prove things about yourself without revealing everything. Need to prove you're over 21? You don't need to share your birthdate - just a cryptographic proof that you meet the requirement. + +## The Sonr Implementation + +At Sonr, we're not just theorizing about SSI - we're building it. Our approach combines: + +1. **IBC-Enabled Blockchain**: Your identity works across multiple chains, not locked to one ecosystem +2. **IPFS Storage**: Your data is distributed and permanent, not sitting in vulnerable databases +3. **WebAuthn Integration**: Authenticate with your fingerprint, not passwords +4. **UCAN Authorization**: Grant specific permissions without sharing your keys + +## Real-World Applications + +This isn't just technology for technology's sake. Here's how SSI will change everyday life: + +### Healthcare +- Carry your medical records with you +- Share only relevant information with providers +- Maintain privacy while ensuring continuity of care + +### Finance +- Instant KYC/AML compliance without repeated paperwork +- Prove creditworthiness without exposing financial details +- Access global financial services with one identity + +### Education +- Verifiable diplomas that can't be faked +- Instant credential verification for employers +- Lifelong learning records that follow you + +### Travel +- Digital passports that speed up border crossings +- Vaccination records that are instantly verifiable +- One identity for all your travel needs + +## The Technical Foundation + +Building SSI requires solving complex technical challenges: + +```typescript +// Creating a verifiable credential +const credential = await Sonr.createCredential({ + type: 'UniversityDegree', + subject: userDID, + claims: { + degree: 'Computer Science', + graduationDate: '2023-05-15' + } +}); + +// Selective disclosure - prove graduation without revealing degree +const proof = await credential.generateProof({ + reveal: ['graduationDate'] +}); +``` + +## Privacy by Design + +Unlike current systems where privacy is an afterthought, SSI builds privacy in from the ground up: + +- **Minimal Disclosure**: Share only what's necessary +- **User Consent**: Every data share requires explicit permission +- **Pseudonymity**: Use different identifiers for different contexts +- **Revocation**: Withdraw access to your data anytime + +## The Path Forward + +Transitioning to SSI won't happen overnight, but the momentum is building: + +- W3C standards for DIDs and Verifiable Credentials are finalized +- Governments are piloting digital identity programs +- Major tech companies are adopting WebAuthn +- The EU's eIDAS 2.0 regulation mandates digital wallets by 2024 + +## Join the Identity Revolution + +The future of identity isn't about better passwords or more secure databases. It's about fundamentally reimagining the relationship between individuals and their digital selves. + +At Sonr, we're building this future today. Whether you're a developer wanting to integrate SSI, an organization looking to issue credentials, or just someone tired of password resets, there's a place for you in this revolution. + +The question isn't whether self-sovereign identity will replace current systems - it's how quickly we can make it happen. The technology is here. The standards are set. Now we need builders, advocates, and early adopters to make it reality. + +Your identity belongs to you. It's time we built an internet that respects that. \ No newline at end of file diff --git a/src/app/articles/introducing-animaginary/page.mdx b/src/app/articles/introducing-animaginary/page.mdx deleted file mode 100644 index eb133eb..0000000 --- a/src/app/articles/introducing-animaginary/page.mdx +++ /dev/null @@ -1,106 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const article = { - author: 'Adam Wathan', - date: '2023-09-02', - title: 'Introducing Animaginary: High performance web animations', - description: - 'When you’re building a website for a company as ambitious as Sonr, you need to make an impression. I wanted people to visit our website and see animations that looked more realistic than reality itself.', -} - -export const metadata = { - title: article.title, - description: article.description, -} - -export default (props) => - -When you’re building a website for a company as ambitious as Sonr, you need to make an impression. I wanted people to visit our website and see animations that looked more realistic than reality itself. - -To make this possible, we needed to squeeze every drop of performance out of the browser possible. And so Animaginary was born. - -```js -import { animate } from '@planetaria/animaginary' - -export function MyComponent({ open, children }) { - return ( - - {children} - - ) -} -``` - -Animaginary is our new web animation library that redefines what you thought was possible on the web. Hand-written in optimized WASM, Animaginary can even animate the `height` property of an element at 60fps. - -## Sermone fata - -Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior -in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite -variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda -torquere temptata, erit maneat et ramos, [iam](#) ait dominari -potitus! Tibi litora matremque fumantia condi radicibus opusque. - -Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur -levitate quas ubi arcum ripas oculos abest. Adest [commissaque -victae](#) in gemitus nectareis ire diva -dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita -nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu -nil utinam paternos ima, commentaque. - -```c -exbibyte_wins = gigahertz(3); -grayscaleUtilityClient = control_uat; -pcmciaHibernate = oop_virus_console(text_mountain); -if (stateWaisFirewire >= -2) { - jfs = 647065 / ldapVrml(tutorialRestore, 85); - metal_runtime_parse = roomComputingResolution - toolbarUpload + - ipx_nvram_open; -} else { - maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node + - only_qbe_media, minicomputer); -} -``` - -Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc -oscula nomina pignora corpus deserat. - -## Lethaei Pindumve me quae dinumerat Pavor - -Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec -divite: et ille illa furit sim verbis Cyllenius. - -1. Captus inpleverunt collo -2. Nec nam placebant -3. Siquos vulgus -4. Dictis carissime fugae -5. A tacitos nulla viginti - -Ungues fistula annoso, ille addit linoque motatque uberior verso -[rubuerunt](#) confine desuetaque. _Sanguine_ anteit -emerguntque expugnacior est pennas iniqui ecce **haeret** genus: peiora imagine -fossas Cephisos formosa! Refugitque amata [refelli](#) -supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum -regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota -ars talis. - -```c -digital.webcam_dual_frequency = webmasterMms; -if (5 + language_standalone_google) { - cc_inbox_layout *= file_character; - task += p; - lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual, - adf); -} -windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314), - dongleBashThumbnail), interpreter); -``` - -Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam -proelia: illo patrio _esse summus_, enim sua serpentibus, Hyleusque. Est coniuge -recuso; refert Coroniden ignotos manat, adfectu. diff --git a/src/app/articles/rewriting-the-cosmos-kernel-in-rust/page.mdx b/src/app/articles/rewriting-the-cosmos-kernel-in-rust/page.mdx deleted file mode 100644 index 35ec0d1..0000000 --- a/src/app/articles/rewriting-the-cosmos-kernel-in-rust/page.mdx +++ /dev/null @@ -1,101 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const article = { - author: 'Adam Wathan', - date: '2023-07-14', - title: 'Rewriting the Sonr MPC Protocol', - description: - 'When we released the Sonr devnet last year, it was functional, secure - but incredibly slow. We took a look inside the system to uncover the bottlenecks and found that the MPC protocol was the culprit. The resulting upgrade made our protocol 180x faster.', -} - -export const metadata = { - title: article.title, - description: article.description, -} - -export default (props) => - -When we released the first version of cosmOS last year, it was written in Go. Go is a wonderful programming language with a lot of benefits, but it’s been a while since I’ve seen an article on the front page of Hacker News about rewriting some important tool in Go and I see articles on there about rewriting things in Rust every single week. - -```rust -use ferris_says::say; -use std::io::{stdout, BufWriter}; - -fn main() { - let stdout = stdout(); - let message = String::from("Hello fellow hackers"); - let width = message.chars().count(); - - let mut writer = BufWriter::new(stdout.lock()); - say(message.as_bytes(), width, &mut writer).unwrap(); -} -``` - -I derive a large amount of my self-worth from whether or not Hacker News is impressed with the work I'm doing, so when I realized this, I cancelled all of our existing projects and started migrating everything to Rust immediately. - -## Sermone fata - -Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior -in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite -variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda -torquere temptata, erit maneat et ramos, [iam](#) ait dominari -potitus! Tibi litora matremque fumantia condi radicibus opusque. - -Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur -levitate quas ubi arcum ripas oculos abest. Adest [commissaque -victae](#) in gemitus nectareis ire diva -dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita -nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu -nil utinam paternos ima, commentaque. - -```c -exbibyte_wins = gigahertz(3); -grayscaleUtilityClient = control_uat; -pcmciaHibernate = oop_virus_console(text_mountain); -if (stateWaisFirewire >= -2) { - jfs = 647065 / ldapVrml(tutorialRestore, 85); - metal_runtime_parse = roomComputingResolution - toolbarUpload + - ipx_nvram_open; -} else { - maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node + - only_qbe_media, minicomputer); -} -``` - -Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc -oscula nomina pignora corpus deserat. - -## Lethaei Pindumve me quae dinumerat Pavor - -Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec -divite: et ille illa furit sim verbis Cyllenius. - -1. Captus inpleverunt collo -2. Nec nam placebant -3. Siquos vulgus -4. Dictis carissime fugae -5. A tacitos nulla viginti - -Ungues fistula annoso, ille addit linoque motatque uberior verso -[rubuerunt](#) confine desuetaque. _Sanguine_ anteit -emerguntque expugnacior est pennas iniqui ecce **haeret** genus: peiora imagine -fossas Cephisos formosa! Refugitque amata [refelli](#) -supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum -regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota -ars talis. - -```c -digital.webcam_dual_frequency = webmasterMms; -if (5 + language_standalone_google) { - cc_inbox_layout *= file_character; - task += p; - lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual, - adf); -} -windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314), - dongleBashThumbnail), interpreter); -``` - -Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam -proelia: illo patrio _esse summus_, enim sua serpentibus, Hyleusque. Est coniuge -recuso; refert Coroniden ignotos manat, adfectu. diff --git a/src/app/articles/why-blockchain-needs-better-ux/page.mdx b/src/app/articles/why-blockchain-needs-better-ux/page.mdx new file mode 100644 index 0000000..5488725 --- /dev/null +++ b/src/app/articles/why-blockchain-needs-better-ux/page.mdx @@ -0,0 +1,97 @@ +import { ArticleLayout } from '@/components/ArticleLayout' + +export const article = { + author: 'Prad Nukala', + date: '2023-11-20', + title: 'Why Blockchain Needs Better UX (And How We're Fixing It)', + description: + 'The biggest barrier to blockchain adoption isn't scalability or regulation - it's user experience. Here's how we're making Web3 as easy as Web2.', +} + +export const metadata = { + title: article.title, + description: article.description, +} + +export default (props) => + +Ask any blockchain developer about the biggest challenge facing our industry, and you'll hear about scalability, regulation, or interoperability. But after years of building in this space and onboarding over 120 developers to blockchain, I've learned the real barrier is much simpler: user experience. + +## The UX Crisis in Web3 + +Let's be honest about the current state of blockchain UX: + +- **Seed Phrases**: Asking users to write down 24 random words and never lose them is a non-starter for mainstream adoption +- **Gas Fees**: Imagine if every click on the internet cost money and required manual approval +- **Addresses**: 42-character hexadecimal strings are not how humans think about identity +- **Transaction Times**: Waiting minutes for confirmations kills any semblance of modern app experience + +These aren't technical limitations - they're design choices we've accepted as "the way blockchain works." + +## Learning from History + +When I created one of the first 5,000 apps on the App Store at age 12, the iPhone had just made computing accessible to everyone. Not by making people understand computers, but by hiding the complexity behind intuitive interfaces. + +Blockchain needs its iPhone moment. + +## The Sonr Approach + +At Sonr, we've rethought blockchain UX from first principles: + +### 1. No Seed Phrases +Using DKLS-MPC technology, users never see or manage private keys. Account recovery uses familiar methods like email or social recovery - not a piece of paper in a safe. + +### 2. Instant Onboarding +Our 600ms wallet generation means users can start using blockchain apps as quickly as they'd sign up for any web service. No downloads, no extensions, no friction. + +### 3. Passkey Authentication +Leveraging WebAuthn standards, users authenticate with their fingerprint or face - the same way they unlock their phones. It's more secure than passwords and infinitely more user-friendly. + +### 4. Invisible Blockchain +Users shouldn't need to understand consensus mechanisms any more than they need to understand TCP/IP to browse the web. Blockchain should be infrastructure, not interface. + +## Real Code, Real Solutions + +Here's how simple it is to integrate Sonr: + +```javascript +// Traditional Web3 +const accounts = await ethereum.request({ + method: 'eth_requestAccounts' +}); +// User must have MetaMask installed +// User must understand gas fees +// User must protect seed phrase + +// With Sonr +const user = await Sonr.authenticate(); +// That's it. No wallet required. +// No seed phrases. Just works. +``` + +## The Broader Impact + +Better UX isn't just about convenience - it's about accessibility and inclusion. When we make blockchain easier to use, we: + +- **Reduce Scams**: Simpler interfaces mean fewer opportunities for user error +- **Increase Adoption**: Lower barriers mean more users and developers +- **Enable Innovation**: When basics are solved, builders can focus on novel applications + +## Looking Forward + +As a W3C Working Group Member, I'm helping shape standards that will make these UX improvements universal. The future of blockchain isn't about teaching billions of people new concepts - it's about making those concepts invisible. + +## The Challenge to Builders + +If you're building in Web3, ask yourself: +- Would my parents be able to use this? +- Does it require reading documentation? +- Are there more than 3 steps to get started? + +If the answer to any of these is yes, we have work to do. + +## Join the UX Revolution + +The blockchain industry has brilliant technologists, but we need more designers, more product thinkers, and more people who put users first. If you're interested in making blockchain accessible to everyone, [reach out](mailto:prad.nukala@sonr.io). + +The future of the internet depends on making it usable by everyone, not just the technically sophisticated. Let's build that future together. \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 7b69240..ed2a997 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -9,10 +9,10 @@ export const metadata: Metadata = { title: { template: '%s - Prad Nukala', default: - 'Prad Nukala - Software designer, founder, and amateur astronaut', + 'Prad Nukala - Founder & CEO of Sonr, Blockchain Identity Pioneer', }, description: - 'I’m Prad, a software designer and entrepreneur based in New York City. I’m the founder and Founder of Sonr, where we develop technologies that empower regular people to explore space on their own terms.', + 'I'm Prad Nukala, founder and CEO of Sonr, an IBC-enabled blockchain for decentralized identity. W3C Working Group Member for DIDs, WebAuthn, and WASM. Building the future of self-sovereign identity and empowering users with control over their digital assets.', alternates: { types: { 'application/rss+xml': `${process.env.NEXT_PUBLIC_SITE_URL}/feed.xml`, diff --git a/src/app/page.tsx b/src/app/page.tsx index 691e733..b764e1f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -122,7 +122,7 @@ function Newsletter() { Stay up to date

- Get notified when I publish something new, and unsubscribe at any time. + Get notified about updates on Sonr, blockchain technology insights, and decentralized identity developments.

= [ { company: 'Sonr', - title: 'A P2P Identity Network', + title: 'Founder & CEO', logo: logoPlanetaria, start: '2020', end: { @@ -198,25 +198,28 @@ function Resume() { }, }, { - company: 'Spacebolt', - title: 'Mobile game built with Unity', + company: 'W3C Working Group', + title: 'Member - DIDs, WebAuthn, WASM', logo: logoAirbnb, - start: '2017', - end: '2018', + start: '2021', + end: { + label: 'Present', + dateTime: new Date().getFullYear().toString(), + }, }, { - company: 'Voluntree', - title: 'iOS Volunteer hours tracker', + company: 'Open Source', + title: '4th Most GitHub Contributions Worldwide', logo: logoFacebook, - start: '2015', - end: '2016', + start: '2021', + end: '2023', }, { - company: 'Spacebolt', - title: 'One of the first 10k Apps Published', + company: 'Early iOS Developer', + title: 'One of the first 5,000 App Store apps', logo: logoStarbucks, - start: '2010', - end: '2011', + start: '2008', + end: '2012', }, ] @@ -274,13 +277,13 @@ export default async function Home() {

- Software engineer, product designer, and founder. + Blockchain pioneer, founder, and decentralized identity architect.

- I’m Prad, a software designer and entrepreneur based in New York - City. I’m the founder and CEO of Sonr, where we develop - technologies that empower regular people to use the web on their - own terms. + I'm Prad Nukala, founder and CEO of Sonr, an IBC-enabled blockchain for decentralized identity. + As a W3C Working Group Member for DIDs, WebAuthn, and WASM, I'm building the future where users + control their digital identity and assets. With over 6000+ GitHub contributions, I'm passionate + about making blockchain technology accessible to everyone.

) { export const metadata: Metadata = { title: 'Projects', - description: 'Things I’ve made trying to put my dent in the universe.', + description: 'Blockchain innovations and decentralized identity solutions I've built to empower users.', } export default function Projects() { return (
    - + + - + diff --git a/src/app/uses/page.tsx b/src/app/uses/page.tsx index 778e326..3cd06ae 100644 --- a/src/app/uses/page.tsx +++ b/src/app/uses/page.tsx @@ -36,88 +36,116 @@ function Tool({ export const metadata = { title: 'Uses', - description: 'Software I use, gadgets I love, and other things I recommend.', + description: 'Tools and technologies I use for blockchain development, building Sonr, and staying productive.', } export default function Uses() { return (
    - - I was using an Intel-based 16” MacBook Pro prior to this and the - difference is night and day. I’ve never heard the fans turn on a - single time, even under the incredibly heavy loads I put it through - with our various launch simulations. + + When you're compiling blockchain nodes and running multiple test networks locally, + RAM is everything. This machine handles everything I throw at it, from Rust compilation + to running full Cosmos SDK nodes. - - The only display on the market if you want something HiDPI and - bigger than 27”. When you’re working at planetary scale, every pixel - you can get counts. + + Dual 5K displays give me the screen real estate I need for coding, monitoring + blockchain metrics, and keeping up with the constant stream of GitHub notifications + from maintaining one of the world's most active contribution streaks. - - They don’t make keyboards the way they used to. I buy these any time - I see them go up for sale and keep them in storage in case I need - parts or need to retire my main. + + Mechanical keyboards aren't just for gaming. The tactile feedback helps me maintain + accuracy during long coding sessions, crucial when every character matters in smart contracts. - - Something about all the gestures makes me feel like a wizard with - special powers. I really like feeling like a wizard with special - powers. - - - If I’m going to slouch in the worst ergonomic position imaginable - all day, I might as well do it in an expensive chair. + + After years of 12+ hour coding days, investing in proper ergonomics isn't optional. + This chair has been perfect for those long sessions building Sonr's infrastructure. - - - I don’t care if it’s missing all of the fancy IDE features everyone - else relies on, Sublime Text is still the best text editor ever - made. + + + Essential for Cosmos SDK development. The Rust analyzer extension is particularly + crucial for blockchain development where type safety can prevent costly errors. - - I’m honestly not even sure what features I get with this that aren’t - just part of the macOS Terminal but it’s what I use. + + The AI-powered terminal that understands context. Perfect for managing multiple + blockchain nodes, SSH sessions, and the complex command sequences involved in + Cosmos SDK development. - - Great software for working with databases. Has saved me from - building about a thousand admin interfaces for my various projects - over the years. + + Running local testnets and managing blockchain infrastructure requires serious + containerization. Docker for local development, K8s for production deployments. + + + The best Kubernetes IDE I've found. Essential for managing Sonr's infrastructure + across multiple environments and monitoring our validator nodes. + + + The entire Cosmos SDK toolkit is essential for building IBC-enabled chains. + From Ignite CLI to CosmWasm, these tools form the backbone of Sonr's development. - + + + The premier wallet for Cosmos ecosystem development. Essential for testing + IBC transactions and interacting with Sonr's testnet. + + + While Sonr uses Cosmos SDK, understanding EVM is crucial. Remix helps me + stay current with Ethereum development and test cross-chain scenarios. + + + Since Sonr integrates IPFS for distributed storage, having a local IPFS + node is essential for development and testing. + + + API testing is crucial when building blockchain infrastructure. Postman + helps me test our REST and gRPC endpoints thoroughly. + + + - We started using Figma as just a design tool but now it’s become our - virtual whiteboard for the entire company. Never would have expected - the collaboration features to be the real hook. + Designing intuitive blockchain UX requires constant iteration. Figma helps + us prototype wallet interfaces and visualize complex identity flows. + + + Perfect for sketching blockchain architectures and explaining complex + technical concepts. Most of our technical documentation starts here. + + + Our entire company knowledge base lives in Notion. From technical specs + to meeting notes, it's our single source of truth. - - - It’s not the newest kid on the block but it’s still the fastest. The - Sublime Text of the application launcher world. + + + More than just an app launcher - it's my command center. Custom scripts + for blockchain operations, quick access to documentation, and AI features + for code generation. - - Using a daily notes system instead of trying to keep things - organized by topics has been super powerful for me. And with - Reflect, it’s still easy for me to keep all of that stuff - discoverable by topic even though all of my writing happens in the - daily note. + + Issue tracking designed for modern software teams. Perfect for managing + Sonr's development across multiple repositories and coordinating with our + distributed team. - - Great tool for scheduling meetings while protecting my calendar and - making sure I still have lots of time for deep work during the week. + + Open-source scheduling that respects privacy. Important when you're building + privacy-first technology and need to practice what you preach. - - Simple tool for blocking distracting websites when I need to just do - the work and get some momentum going. + + Where the blockchain community lives. Essential for staying connected with + the Cosmos ecosystem and supporting our developer community. + + + AI pair programming at its finest. Particularly helpful when working with + new Cosmos SDK modules or implementing complex cryptographic functions.
    ) -} +} \ No newline at end of file