I understand NAT exists to not exhaust all the ipv4 addresses so there is no need for it with ipv6. So with ipv6 having an unimaginable amount of addresses, will every device have its own public address? If not how will it work? I know that ipv6 has link local and local addresses but how does the public ip addresses work.
One of the key aspects with IPv6 is that it's entirely normal for a node to use multiple IP addresses on each interface simultaneously.
Those include public addresses (no need for NAT at all), link local (only valid within the scope of a subnet, not routed), and unique local addresses (only valid within the scope of a site or within cooperating sites, not routed to the public).
Accordingly, you can access a local server on a static, unique local address while it's using a dynamic, public address to access the Internet. Of course, you still need a static, public address for a server to make it publicly accessible from the Internet.
A public address is only necessary when Internet access is required, but the abundance of readily available addresses removes the need to share any public addresses. A unique local address may or may not be present, depending on company requirements. A link local address is always present.