We solve for the first time (*) a longstanding puzzle of quantitative finance that has often been described as the Holy Grail of volatility modeling: build a model that jointly and exactly calibrates to the prices of S&P 500 (SPX) options, VIX futures, and VIX options. So far the best attempts, which used parametric continuous-time (jump-)diffusion models on the SPX, only produced approximate fits. We use a very different, nonparametric and discrete-time approach. Given a VIX future maturity T1, we consider the set P of all joint probability measures on the SPX at T1 the VIX at T1, and the SPX at T2 = T1 + 30 days which are perfectly calibrated to the full SPX smiles at T1 and T2, and the full VIX smile at T1, and which also satisfy the martingality constraint on the SPX as well as the requirement that the VIX is the implied volatility of the 30-day log-contract on the SPX. We first consider robust hedging in this setting. By casting the superreplication problem as what we call a dispersion-constrained martingale optimal transport problem, we establish a strong duality theorem and, as a result, prove that the absence of joint SPX/VIX arbitrage is equivalent to the set P of jointly calibrating models being nonempty. Should they arise, joint arbitrages are identified using classical linear programming. In the absence of joint arbitrage, we then provide a solution to the joint calibration puzzle by solving what we call a dispersion-constrained martingale Schrodinger problem: we choose a reference measure and build the unique jointly calibrating model that minimizes the relative entropy. We establish several dual versions of the problem, one of which has a natural financial interpretation in terms of exponential utility indifference pricing, and prove absence of duality gaps. The minimum entropy jointly calibrating model is explicit in terms of what we call the dual Schrodinger portfolio, i.e., the maximizer of the dual problems, should it exist. We numerically compute this Schrodinger portfolio using an extension of the Sinkhorn algorithm, in the spirit of De March and Henry-Labordere (2019). Our numerical experiments show that the algorithm performs very well in both low and high volatility regimes. Along the way, we provide new variants, as well as a new proof, of strong duality theorems for the classical Schrodinger problem and for a mixed Schrodinger-Monge-Kantorovich problem (also known as entropic optimal transport problem) that has recently attracted a lot of attention in the optimal transport community, which are interesting in themselves. Our methodology applies not only to the VIX, but also to any index computed as a function of the price of an option on some underlying asset. (*) A first, much shorter version of this article was published in Risk in April 2020. This version includes new theorems, proofs, analysis, and numerical tests. In particular it develops a theory of dispersion-constrained martingale Schrodinger problems and proves strong duality results for them.