import { Fragment, useEffect, useId, useRef, useState } from 'react' import { Tab } from '@headlessui/react' import clsx from 'clsx' import { AnimatePresence, motion } from 'framer-motion' import { useDebouncedCallback } from 'use-debounce' import Image from 'next/image' import { AppScreen } from '@/components/AppScreen' import { CircleBackground } from '@/components/CircleBackground' import { Container } from '@/components/Container' import { PhoneFrame } from '@/components/PhoneFrame' import { DiageoLogo, LaravelLogo, MirageLogo, ReversableLogo, StatamicLogo, StaticKitLogo, TransistorLogo, TupleLogo, } from '@/components/StockLogos' import exampleApp from '@/images/example-app.png' const MotionAppScreenHeader = motion(AppScreen.Header) const MotionAppScreenBody = motion(AppScreen.Body) const features = [ { name: 'Invite friends for better returns', description: 'For every friend you invite to Pocket, you get insider notifications 5 seconds sooner. And it’s 10 seconds if you invite an insider.', icon: DeviceUserIcon }, { name: 'Notifications on stock dips', description: 'Get a push notification every time we find out something that’s going to lower the share price on your holdings so you can sell before the information hits the public markets.', icon: DeviceNotificationIcon }, { name: 'Invest what you want', description: 'We hide your stock purchases behind thousands of anonymous trading accounts, so suspicious activity can never be traced back to you.', icon: DeviceTouchIcon }, ] function DeviceUserIcon(props) { return ( ) } function DeviceNotificationIcon(props) { return ( ) } function DeviceTouchIcon(props) { let id = useId() return ( ) } const headerAnimation = { initial: { opacity: 0, transition: { duration: 0.3 } }, animate: { opacity: 1, transition: { duration: 0.3, delay: 0.3 } }, exit: { opacity: 0, transition: { duration: 0.3 } }, } const maxZIndex = 2147483647 const bodyVariantBackwards = { opacity: 0.4, scale: 0.8, zIndex: 0, filter: 'blur(4px)', zIndex: 0, transition: { duration: 0.4 }, } const bodyVariantForwards = (custom) => ({ y: '100%', zIndex: maxZIndex - custom.changeCount, transition: { duration: 0.4 }, }) const bodyAnimation = { initial: 'initial', animate: 'animate', exit: 'exit', variants: { initial: (custom) => custom.isForwards ? bodyVariantForwards(custom) : bodyVariantBackwards, animate: (custom) => ({ y: '0%', opacity: 1, scale: 1, zIndex: maxZIndex / 2 - custom.changeCount, filter: 'blur(0px)', transition: { duration: 0.4 }, }), exit: (custom) => custom.isForwards ? bodyVariantBackwards : bodyVariantForwards(custom), }, } function InviteScreen({ custom, animated = false }) { return ( Invite people Get tips 5s sooner for every invite.
{[ { label: 'Full name', value: 'Albert H. Wiggin' }, { label: 'Email address', value: 'awiggin@chase.com' }, ].map((field) => (
{field.label}
{field.value}
))}
Invite person
) } export function PrimaryFeatures() { return (

Every way you could possibly want to express yourself and talk with people

Akkoma is a part of the "fediverse"; that means it's a social network with no central authority. You can follow and talk with anyone else that has an account on any other fediverse service, and you can even host your own server if you want.


For those more familiar with the fediverse, Akkoma is a specialised fork of Pleroma. It is faster-paced in development and aligns itself more closely with Misskey than Pleroma mainline.
It differentiates itself with a focus on custom expression, for example with custom emoji reactions, or Misskey-Flavoured Markdown.

) }